概括地讲,类就是一些函数的包,这些函数大量使用并处理内置对象类型。不过类的设计是为了创建和管理新的对象,并且它们也支持继承。这是一种代码定制和复用的机制。在python中,OOP完全可选,并且在初学阶段不需要使用类。实际上,可以用较为简单的结构,例如函数,甚至简单顶层脚本代码,这样就可以做很多事。
class C1(C2, C3):
def __init__(self, who):
self.name = who
l1 = C1('bob')
l2 = C1('mel')
print(l1.name)
每次从类产生实例时,python会自动调用名为__init__的方法。新实例会如往常那样传入__init__的self参数。由于__init__方法的运行时机,它也称为是构造函数。
类与模块3个不同之处
1、支持多个对象的产生
2、命名空间继承
3、运算符重载
类可以截获python运算符
运算符重载就是让类写成的对象,可截获并响应应用在内置类型上的运算:加法、切片、打印和点号运算等。
虽然我们可以把所有类行为实现为方法函数,运算符重载则让对象和python的对象模型更紧密地结合起来。此外,因为运算符重载,让我们自己的对象行为就像内置对象那样,这可促进对象接口更为一致并更易于学习,而且可让对象由预期的内置类型接口的代码处理。
1、以双下划线命名的方法 (__X__) 是特殊钩子。python运算符重载的实现是提供特殊命名的方法来拦截运算。python语言替每种运算和特殊命名的方法之间,定义了固定不变的映射关系。
2、当实例出现在内置运算时,这类方法会自动调用。
3、类可覆盖多数内置类型运算。有几十种特殊运算符重载的方法的名称,几乎可截获并实现内置类型的所有运算。它不仅包括表达式,而且像打印和对象建立这类基本运算也包括在内。
4、运算符覆盖方法没有默认值,而且也不需要。
5、运算符可让类与python的对象模型相集成。
运算符重载是可选的功能。因此我们不会在本书中深入讨论python每个可用的运算符重载方法。不过有个运算符重载,你可能会在每个实现的python类中遇见:__init__方法,也称为构造函数方法。