我想知道enter C enter A leave A leave C
的顺序如此热门吗?
谁叫C.__init__()
?为什么在B之后紧接A?
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()
结果如下:
enter D
enter B
enter C
enter A
leave A
leave C
leave B
leave D
答案 0 :(得分:0)
这是因为super().__init__
的位置,它位于两个print
函数的中间,这会将它发送到print
之前要离开课程的另一个课程,所以做
class A():
def __init__(self):
print('enter A')
print('leave A')
class B(A):
def __init__(self):
print('enter B')
print('leave B')
super().__init__()
class C(A):
def __init__(self):
print('enter C')
print('leave C')
super().__init__()
class D(B, C):
def __init__(self):
print('enter D')
print('leave D')
super().__init__()
d = D()
输出:
enter D
leave D
enter B
leave B
enter C
leave C
enter A
leave A
又为什么在B
之前A
,因为它首先处理两个子类,请参阅@chepner的注释以获取更多信息。