本帖最后由 ufo0033 于 2021-1-29 13:41 编辑
python的钻石继承 实际上 是被拉成了线性。从d来看,分别继承b和c 那么 b的 super().__init__(a) 实际上是在给c 初始化。 这里开始参数不对了,
[Python] 纯文本查看 复制代码 class A:
def __init__(self, a, *args, **kwargs):
print('进入A')
self.a = a
print("A message:", self.a)
print('离开A')
class B(A):
def __init__(self, b, *args, **kwargs):
print('进入B')
super(B, self).__init__(*args, **kwargs)
self.b = b
print("B message:", self.b)
print('离开B')
class C(A):
def __init__(self, c, *args, **kwargs):
print('进入C')
super(C, self).__init__(*args, **kwargs)
self.c = c
print("C message:",self.c)
print('离开C')
class D(B, C):
def __init__(self, d, *args, **kwargs):
print('进入D')
super(D, self).__init__(*args, **kwargs)
self.d = d
print("D message:",self.d)
print('离开D')
def main():
# A(1)
# B(2, 3)
# C(4, 5)
D(6, 7, 8, 9)
if __name__ == '__main__':
main()
这样设计的目的是为了防止 A被多次初始化 |