super() 严格遵循 mro 确保每个父类方法只执行一次,而非简单调用直接父类;显式调用父类名会导致多重继承中重复初始化或跳过,而 super() 依赖整个链协作且需统一使用 args, *kwargs 透传参数。

因为显式调用父类名(如 Parent.__init__(self))在多重继承中会破坏方法调用顺序,导致父类初始化被重复执行或完全跳过;而 super() 严格遵循 MRO(Method Resolution Order),确保每个父类的同名方法只被调用一次,且顺序可控。
super() 不是“调用父类”,而是“调用 MRO 中的下一个类”
这是最容易误解的一点。当你写 super().__init__(),Python 并不查找“直接父类”,而是从当前类的 __mro__ 元组里,取当前类之后的那个类,并调用它的方法。
比如:D(B, C) 的 __mro__ 是 (D, B, C, A, object),那么在 D.__init__() 中调用 super().__init__(),实际调用的是 B.__init__(),不是 A.__init__()。
- 错误认知:“
super()= 上一级父类” → 实际是 “MRO 序列中当前位置的下一个” - 验证方式:打印
D.__mro__,再对照调用链输出 - 如果某个类没用
super(),MRO 链就会在这里断裂,后续类的方法不会被触发
显式调用父类名在多重继承中会重复初始化
假设你有 A、B(A)、C(A)、D(B, C),并在 D.__init__() 中分别写 B.__init__(self) 和 C.__init__(self):
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
class A:
def __init__(self):
print("A init")
<p>class B(A):
def <strong>init</strong>(self):
A.<strong>init</strong>(self)
print("B init")</p><p>class C(A):
def <strong>init</strong>(self):
A.<strong>init</strong>(self)
print("C init")</p><p>class D(B, C):
def <strong>init</strong>(self):
B.<strong>init</strong>(self) # → 触发 A.<strong>init</strong>()
C.<strong>init</strong>(self) # → 再次触发 A.<strong>init</strong>()
print("D init")</p>
运行 D() 会输出两次 "A init" —— 这在资源初始化、数据库连接、文件打开等场景下可能引发冲突或泄漏。
- 用
super()可彻底避免重复:所有类统一用super().__init__() - 前提是所有参与继承链的类都协作使用
super(),否则链会断 - 参数必须兼容:建议统一用
*args, **kwargs透传,避免因参数不匹配导致TypeError
super() 能让继承结构变更更安全
当父类重命名、或继承关系调整(比如把 class Child(Parent) 改成 class Child(Base, Mixin)),硬编码的 Parent.__init__(self) 就得逐个改,漏改就出错;而 super() 完全不依赖类名,MRO 自动适配新结构。
- 重构时不用 grep 全项目找
Parent.__init__,减少遗漏风险 - Mixin 类尤其依赖
super():它们不关心谁继承自己,只保证把控制权交还给 MRO 下一个 - Python 3 中
super()可无参调用,隐式绑定当前类和self,比 Python 2 的super(Child, self)更简洁可靠
真正难的不是写 super(),而是让整个继承链上的所有类都用它,并保持参数签名一致——一旦中间某个类用回了硬编码父类名,整条协作链就失效了。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










