You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多父类中super().__init__触发Base2执行的原理是什么?

Python多重继承中__init__执行顺序解析

先看你的代码示例:

class Base1:
    def __init__(self):
        super().__init__()
        print("Base1 __init__")

class Base2:
    def __init__(self):
        print("Base2 __init__")

class Derived(Base1, Base2):
     pass

# 创建Derived类实例
d = Derived()

执行后输出:

Base2 __init__
Base1 __init__

核心原理:super()与MRO的协作

  1. 确认MRO顺序:Derived类的方法解析顺序(MRO)是 Derived -> Base1 -> Base2 -> object,你可以通过执行print(Derived.__mro__)直接查看。
  2. 实例化的调用流程:
    • 因为Derived没有自定义__init__,所以会自动调用MRO中第一个有__init__的类,也就是Base1的__init__。
    • Base1的__init__里调用了super().__init__()——这里的super()不是简单指向Base1的父类(object),而是基于当前实例所属类(Derived)的MRO顺序,找到Base1之后的下一个类,也就是Base2,因此会调用Base2的__init__。
    • Base2的__init__没有调用super(),所以执行完打印语句后,回到Base1的__init__,继续执行后续的打印操作。

这就是为什么会先输出Base2的信息,再输出Base1的信息,而非只运行Base1的__init__。

内容的提问来源于stack exchange,提问作者user1008636

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:55:03