在Python中继承的__init__调用的确切顺序是什么?



对于下面定义的三个类,Python解释器到达第1行、第2行和第3行的顺序是什么?

class GranParent():
def __init__(self):
#line 1
class Parent(GrandParent):
def  __init__(self):
#line 2
super().__init__()
class Child(Parent):
def __init__(self):
super().__init__()
#line 3
ob = Child()

a)第3行,第2行,第1行
b)第2行,第3行,第1行
c)第2行,第1行,第3行
d)第1行,第2行,第3行
e)第1行,第3行,第2行
f)以上均为

我最初的猜测是d)因为类子继承自继承自祖父母类的父类,但答案键说答案是c。我不知道为什么是c。

每当它到达super().__init__()行时,它就停在当前帧中的该点,然后运行新的初始化器帧。

Child中,super().__init__()#line 3之前,因此它跳到Parent__init__。首先运行#line 2,然后运行,然后运行它到达super().__init__()行,再次跳转到GrandParent__init__,并运行#line 1

GrandParent__init__完成后,它返回并继续前一帧,即Parent__init__,但那里没有任何要执行的内容。它再次回到Chils__init__,最后执行#line 3

最新更新