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

mwg9r5ms  于 2022-12-24  发布在  Python
关注(0)|答案(1)|浏览(165)

关于下面定义的三个类,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。

ef1yzkbh

ef1yzkbh1#

每当它到达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 .

相关问题