在你最初的定义中,
class D(C, A)
,呼叫
D.__init__
决心
C.__init__
A.__init__
从来没有打过电话
__foo
属性从未创建。
在修改后的定义中(
class D(A, C)
),呼叫
决心
A、 初始化__
__福
.
调用父构造函数以确保实例正确初始化是很重要的,而且与Java不同,必须显式调用父构造函数。
对于多重继承,如果使用
super
确保每个班级
__init__
class A(object):
def __init__(self):
super(A, self).__init__()
self.__foo = 1
def bar(self):
return self.__foo
class B(object):
pass
class C(B):
def __init__(self):
super(C, self).__init__()
self.test = 1
class D1(C,A):
pass
class D2(A,C):
pass
# Both will print 1
print D1().bar()
print D2().bar()
只要
全部的
超级的
正确地说,每个方法都将被调用一次,不管方法的解析顺序是D1
[C, B, A, object]
或D2
[A, C, B, object]