Python继承中__init__调用顺序解析及代码执行顺序疑问
Python继承场景下__init__方法的调用顺序解析
先看你给出的代码(修正了类名拼写错误GranParent→GrandParent):
class GrandParent(): 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()
执行顺序拆解
当创建Child实例ob时,调用链的执行逻辑如下:
- 触发
Child.__init__,首先执行super().__init__(),跳转到父类Parent的__init__方法。 - 进入
Parent.__init__,先执行line 2的代码,再调用super().__init__(),跳转到父类GrandParent的__init__方法。 - 进入
GrandParent.__init__,执行line 1的代码,执行完毕后返回Parent.__init__。 Parent.__init__执行完毕,返回Child.__init__,最后执行line 3的代码。
所以实际执行顺序是:line 2 → line 1 → line 3,对应选项c)。
误解原因说明
你误以为继承链是从最顶层父类开始执行,但实际上super()是在当前方法执行到该语句时,才会去调用父类的构造方法。Parent的构造方法是先执行自身的代码(line2),再去调用父类的构造,而非先执行父类的逻辑。
内容的提问来源于stack exchange,提问作者momo123321
相关产品推荐
相关产品推荐

