经典的菱形继承案例,BC 继承 A,然后 D 继承 BC,创造一个 D 的对象。
---> B ---
A --| |--> D
---> C ---
使用 super() 可以很好地避免构造函数被调用两次。
在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,
是按照MRO(Method Resolution Order):方法解析顺序 进行的。
class A():
def __init__(self):
print('enter A')
print('leave A')
class B(A):
def __init__(self):
print('enter B')
super().__init__()
print('leave B')
class C(A):
def __init__(self):
print('enter C')
super().__init__()
print('leave C')
class D(B, C):
def __init__(self):
print('enter D')
super().__init__()
print('leave D')
d = D()
0utput:
enter D
enter B
enter C
enter A
leave A
leave C
leave B
leave D