【发布时间】:2018-05-07 07:05:43
【问题描述】:
让我们拥有以下 Python2 代码:
#!/usr/bin/python
class A1(object):
def __init__(self):
super(A1, self).__init__()
print "A1.__init__"
class A2(A1):
def __init__(self):
super(A2, self).__init__()
print "A2.__init__"
class B1(object):
def __init__(self):
super(B1, self).__init__()
print "B1.__init__"
class B2(B1):
def __init__(self):
super(B2, self).__init__()
print "B2.__init__"
class C(A2, B2):
def __init__(self):
super(C, self).__init__()
print "C.__init__"
C()
print C.mro()
即C继承自两个没有共同祖先的前驱类分支(除了默认的object,不确定这有多重要)。代码输出:
B1.__init__
B2.__init__
A1.__init__
A2.__init__
C.__init__
[<class '__main__.C'>, <class '__main__.A2'>, <class '__main__.A1'>, <class '__main__.B2'>, <class '__main__.B1'>, <type 'object'>]
完全符合预期。
现在说我粗心,忘记在A1 和B1 中调用super().__init__()(我不在乎初始化object 那么多......)。然后输出变为:
A1.__init__
A2.__init__
C.__init__
[<class '__main__.C'>, <class '__main__.A2'>, <class '__main__.A1'>, <class '__main__.B2'>, <class '__main__.B1'>, <type 'object'>]
现在只有A1-A2 分支被初始化——而C.mro() 根本没有改变!
这种行为的原因是什么?
【问题讨论】:
标签: python multiple-inheritance init super method-resolution-order