super() 父类代理
最后更新:2026-09-22
super() 父类代理
super() 返回父类的代理对象;可在子类方法中调用父类实现。
| 分类 | 内置函数 |
|---|---|
| 类型 | 内置函数 |
| Python 版本 | all |
📝 语法
super([type[, object-or-type]])
⚙️ 参数
| type 可选 | 类;零参数形式自动推断当前类和实例。(默认值:None) |
|---|---|
| obj 可选 | 实例或类,用于 MRO 定位。(默认值:None) |
返回值:返回 MRO 中下一个类(父类)的代理对象,可经它调用父类方法。
💥 异常
RuntimeError— 零参数形式在类外部调用时抛出。TypeError— obj 不是 type 的实例(或子类)时抛出。
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
A.hello
B.hello
🏷️ 相关内置函数
💡 相关案例
更多实战案例即将上线,敬请期待。
❓ 常见问题
Qsuper() 是干什么的?
A在子类方法里调用父类的同名实现:super().hello() 会找到 MRO 中“下一个类”的 hello 方法并调用它。
Q为什么 super() 必须在类的方法里调用?
A零参数形式会自动推断“当前类 + 当前实例”,在类外(如普通函数里)调用会抛 RuntimeError: super(): no arguments。
Q什么时候必须写 super().__init__()?
A子类重写了 __init__ 且希望父类也完成初始化时;不写则父类 __init__ 不会执行(除非父类就是 object)。
Qsuper() 在多继承里按什么顺序找父类?
A按 MRO(方法解析顺序)。super() 不是“直接父类”而是“MRO 中的下一个类”,多继承时能正确处理钻石继承,避免父类被重复调用。