9.3. 初识类
类引入了些许新语法,三种新的对象类型和一些新的语义。
9.3.1 类定义语法
类定义最简单的形式如下:
classClassName:
.
.
.
类的定义就像函数定义(def语句),要先定义后使用。(你当然可以在if语句的某一分支,或者一个函数的内部定义它。)
实际上,类定义内的语句通常是函数定义,不过其它语句也可以,而且有时会很有用--后面我们再回过头来讨论。类中的函数定义通常有一个特别的参数列表,用于方法调用约定——同样我们在后面讨论这些。
一旦遇到类定义,会创建出一个新的命名空间,用作局部作用域。这样,所有局部变量的赋值就进入这个新命名空间。尤其是函数定义在此绑定了新的函数名。
类定义离开后(正常退出),就创建了一个类对象。这本质上是对类定义创建的命名空间的内容的封装。我们在下一节进一步学习类对象的知识。原始的局部作用域(类定义引入之前生效的那个)得到恢复,并且类对象被绑定到类的名字(类定义头部的给出的)上(例子中是 ClassName )。
9.3.2 类对象
类对象支持两种操作:属性引用和实例化。
属性引用和Python 中所有的属性引用使用同样的标准语法:obj.name。
对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
classMyClass:
"""A simple example class"""
i =12345
deff(self):
return'hello world'
那么MyClass.i 和 MyClass.f 是有效的属性引用,分别返回一个整数和一个方法对象。也可以对类属性赋值,你可以通过给 MyClass.i 赋值来修改它。
__doc__ 也是一个有效的属性,返回类的文档字符串:"A simple example class"。
类的实例化使用函数符号。只要假装类对象是个返回新的类实例的无参函数就可。例如(假设使用前面的类):
x = MyClass()
以上创建了一个新的类实例,并将该对象赋给局部变量x。
这个实例化操作(“调用”一个类对象)创建了一个空的对象。很多类喜欢用指定了初始状态的实例来创建对象。因此类可能会定义一个名为 __init__() 的特殊方法,像下面这样:
def__init__(self):
self.data = []
当类定义了__init__()方法的话,类的实例化操作会自动为新创建的类实例调用__init__()方法。所以在下例中,可以这样创建一个新的实例:
x = MyClass()
当然,出于弹性的需要,__init__() 方法可以有参数。事实上把给实例化操作的参数传给了__init__() 。例如,
>>>classComplex:
...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)
准确理解—与曾工一块学习
领取专属 10元无门槛券
私享最新 技术干货