6.3 初识类
类引入一些新语法:三种新的对象类型和一些新的语义。
6.3.1 类定义语法
类定义的最简单形式如下:
class ClassName:
<statement-1>
.
.
.
<statement-N>
类定义和函数定义(def语句)一样,必须先执行然后才生效。(你当然可以把类定义放在if语句分支中或者嵌入在函数中)
在实际情况中,在类定义中的语句常常是方法的定义,但是其他语句也是允许的并且有时是很有用的---以后我们会讨论到这点。在类中的定义方法通常有一个参数列表的特殊形式, 用于方法的调用约定--再者这将来会解释。
当进入类定义时,新的命名空间将会创建且当用局部作用域来用-因此所有的有关局部变量的参数将会进入新的命名空间。特别地, 函数定义绑定新函数的名称。
当类定义完成时,(通过结尾),一个类对象就会产生。这个是由类定义所创建的包含命名空间内容的基本包装。我们将会在接下来的部分了解更多的关于类对象的知识。类对象在这里绑定在类定义文件开头给出的类名称。(就是实例中的ClassName)
6.3.2 类对象
类对象支持两种类型操作:属性引用和实例化
在python中属性引用用标准的语法来操作所有的属性引用:obj.name.合法的属性名称就是当类对象创建时在类命名空间中的所有名称。因此,如果类定义如下:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return ’hello world’
则用MyClass.i和MyClass.f是合法的属性引用,各自返回一个整型和函数对象。类属性也可以进行赋值,因此你可以用通过赋值来来改变MyClass.i的值。_doc_是一个合法属性,返回一个属性类的文档字符串。;“一个简单类例子”
类实例就是用函数符号。假设类对象就是无参数的函数,它返回一个类的实例。 例如:(假设上面的类)
x = MyClass()
创建一个类实例和把这个对象赋值给局部变量x.
实例化操作(调用类对象)将会创建一个空对象。许多类可以用设置特定的初始状态来创建对象。因此类可以定义一个名叫_init()的特殊方法,如下:
def __init__(self):
self.data = []
当类定义_init()方式时,类实例化就会自动调用_init_()方法为新创建的类实例。因此在这个实例中,一个新初始化的实例可以通过如下方式得到:
X = MyClass()
当然,_init_方法为了更灵活应用拥有参数。在那种情况下,给予类实例操作的实例将会传递给init方法。例如:
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)