到目前为止,在我们编写的所有程序中,我们都是围绕函数(即操纵数据的语句块)设计程序的。这称为面向过程的编程方式。组织程序的另一种方法是将数据和功能结合在一起,然后将其包装在称为“对象”的内部。这称为面向对象编程范例。大多数时候,您可以使用过程编程,但是在编写大型程序或遇到更适合此方法的问题时,可以使用面向对象的编程技术。 类和对象是面向对象编程的两个主要方面。一个类创建一个新的类型,其中对象是该类的实例。打个比方,您可以拥有类型变量,int 这意味着存储整数的变量是属于类的实例(对象)的变量int 。 静态语言程序员注意事项 请注意,即使整数也被视为(int 该类的)对象。这与C ++和Java(1.5版之前)不同,在C ++和Java中,整数是原始本机类型。 有关help(int) 更多信息,请参见。 C#和Java 1.5程序员会发现这与装箱和拆箱概念相似。
对象可以使用属于该对象的普通变量来存储数据。属于对象或类的变量称为字段。通过使用属于一个类的函数,对象也可以具有功能。这样的函数称为类的方法。此术语很重要,因为它有助于我们区分独立的函数和变量以及属于类或对象的函数和变量。字段和方法可以统称为该类的属性。 字段有两种类型-字段可以属于该类的每个实例/对象,也可以属于该类本身。它们分别称为实例变量和类变量。 使用class 关键字创建一个类。该类的字段和方法在缩进的块中列出。 self 类方法与普通函数只有一个特定的区别-它们必须具有一个额外的名字,该名字必须添加到参数列表的开头,但是在调用该方法时,您无需为此参数提供值,Python会提供它。这个特定的变量指的是对象本身,按照惯例,它被命名为self 。 尽管可以为该参数指定任何名称,但强烈建议您使用该名称self -绝对不建议使用其他任何名称。使用标准名称有很多优点-程序的任何阅读者都可以立即识别它,即使使用,甚至是专用的IDE(集成开发环境)也可以为您提供帮助self 。 C ++ / Java / C#程序员注意事项 self Python中的in等效this 于C ++中的指针以及this Java和C#中的引用。
您一定想知道Python如何为它提供价值,self 以及为什么不需要为它提供价值。一个例子将使这一点变得清楚。假设您有一个名为的类,MyClass 而该类的一个实例为myobject 。当您将此对象的方法称为时myobject.method(arg1, arg2) ,Python会自动将其转换为MyClass.method(myobject, arg1, arg2) -这就是所有特殊self 内容。 这也意味着,如果您有一个不带参数的方法,那么您仍然必须有一个参数- self 。 class下例显示了最简单的类(另存为oop_simplestclass.py )。 class Person:
pass
p = Person()
print(p)
输出: $ python oop_simplestclass.py
<__main__.Person instance at 0x10171f518>
这个怎么运作 我们使用class 语句和类名创建一个新类。紧随其后的是缩进的语句块,这些语句构成了类的主体。在这种情况下,我们有一个空块,使用pass 语句来指示。 接下来,我们使用该类的名称和一对圆括号创建该类的对象/实例。(我们将在下一节中了解有关实例化的更多信息)。为了进行验证,我们只需打印即可确认变量的类型。它告诉我们Person 在__main__ 模块中有该类的实例。 请注意,还会存储您存储对象的计算机内存的地址。该地址在您的计算机上将具有不同的值,因为Python可以在找到空间的任何地方存储该对象。 方法我们已经讨论过,类/对象可以像函数一样具有方法,除了我们有一个额外的self 变量。现在,我们将看到一个示例(另存为oop_method.py )。 class Person:
def say_hi(self):
print('Hello, how are you?')
p = Person()
p.say_hi()
|