一、class语句
python的class就和def一样,class语句是对象的创建者并且是一个隐含的赋值运算:当它执行时会产生类对象,并把其引用值存储到前面所使用的名称中。此外像def一样,class语句也是真正的可执行代码。直到python抵达并运行定义的class语句前,我们的类都不存在。
1.1 一般形式
class语句的一般形式如下(当列出一个以上的父类会触发多重继承):
class name(superclass,...):
attr=value
def method(self,...):
self.attr=value
在class语句内,任何赋值语句都会产生类属性,并且还有特殊名称方法重载运算符。例如,如果定义了名为__init__
的构造函数就会在实例对象创建时调用。
1.2 示例
待补充 96
二、方法
方法是位于class语句的主体内,由def语句创建的函数对象。从抽象的角度来看,方法为示例对象提供了要继承的行为。从程序设计的角度来看,方法的工作方式与简单函数完全一致,只是有一个重要差异:方法的第一位参数总是接受方法调用的隐含主体,也就是当前的实例对象。
换句话说,python会自动把实例方法的调用映射为类的方法函数,如下所示。方法调用需通过实例,就像这样:
instance.method(args...)
这会被自动翻译成以下形式的类方法调用:
class.method(instance,args...)
除了方法属性名称是正常被继承的之外,第一位参数就是方法调用背后唯一的神奇之处。在一个类的方法中,按惯例第一位参数通常都称为self
(从技术上来讲,只有其位置重要,名称不重要)。这个参数给方法提供了一个钩子,从而返回调用的主体也就是实例对象:因为类可以产生许多实例对象,所以需要这个参数管理每个实例彼此各不相同的数据。
2.1 示例
2.2 调用父类构造函数
方法一般是通过实例来调用的,不过也有一些通过类调用的特殊函数,其中一个就是构造函数。正如所有其他属性,__init__
方法也是由继承来查找的。也就是说,在构造时,python会找出并且只调用一个__init__
。如果要保证子类的构造函数也会执行父类构造时的逻辑,那么一般都必须通过类显式地调用父类的__init__
方法:
class super:
def __init__(self,x):
'''default code'''
class sub(super):
def __init__(self,x,y):
super.__init__(self,x)
'''custom code'''
test=sub(1,2)
2.3 其他方法调用的可能性
三、继承
3.1 属性树的构造
3.2 定制被继承的方法
3.3 类接口技术
3.4 抽象父类
3.5 python3中的抽象父类:预览