super()用于调用父类方法,提升代码可维护性,尤其在多重继承中按MRO顺序执行,确保协作继承的正确性。

在 Python 中,super() 是一个内置函数,用来调用父类(或超类)的方法。它常用于继承场景中,尤其是在子类重写了父类的某些方法时,仍希望调用父类中被覆盖的方法。
super() 的基本作用
super() 返回一个代理对象,这个代理可以用来访问父类的方法。它的主要优势是避免直接使用父类名称,从而提升代码的可维护性,特别是在多重继承中。
例如:
class Parent:def __init__(self, name):
self.name = name
print("Parent 初始化")
class Child(Parent):
def __init__(self, name, age):
super().__init__(name) # 调用父类的 __init__
self.age = age
print("Child 初始化")
c = Child("小明", 12)
输出:
立即学习“Python免费学习笔记(深入)”;
Parent 初始化Child 初始化
这里 super().__init__(name) 等价于 Parent.__init__(self, name),但更灵活,尤其在多层继承中。
super() 与 MRO(方法解析顺序)
Python 使用 C3 算法确定方法查找顺序,即 MRO(Method Resolution Order)。在多重继承中,super() 并不总是调用“直接父类”,而是根据 MRO 顺序调用下一个类的方法。
商品查询功能提供了一个快速查看商品的途径。商品查询分为基本查询和高级查询。基本查询:提供关键字和商品大类两种条件的查询,用户可以只填写关键字或者选择商品大类或者关键字和商品大类都填写来查询商品。高级查询:提供关键字,商品大类,商品小类,商品价格范围四种条件的查询,用户可以任意填写其中一种或几种的查询条件来查询想要了解的商品信息。商品查询功能大大的方便了用户,提高了网站的用户体验。(5)帮助系统模块
例如:
class A:def show(self):
print("A 的 show")
class B(A):
def show(self):
print("B 的 show")
super().show()
class C(A):
def show(self):
print("C 的 show")
super().show()
class D(B, C):
def show(self):
print("D 的 show")
super().show()
d = D()
d.show()
print(D.__mro__)
输出:
立即学习“Python免费学习笔记(深入)”;
D 的 showB 的 show
C 的 show
A 的 show
(
可以看到,super() 按照 MRO 顺序依次调用,而不是简单地只调用 B 或 C 的父类。这就是为什么正确使用 super() 对协作设计(cooperative inheritance)非常重要。
使用 super() 的建议
- 始终在子类中使用 super() 来调用父类方法,而不是硬编码父类名,这样能保证在继承结构变化时代码依然健壮。
- 在多重继承中,确保所有类都使用 super() 并保持参数兼容(比如都接受 *args 和 **kwargs),否则可能出错。
- 调用 super() 时注意位置:通常放在子类方法的开头或结尾,取决于是否需要前置/后置处理。
基本上就这些。super() 不只是“调父类”,它是 Python 动态继承机制的重要组成部分,理解它有助于写出更清晰、可扩展的面向对象代码。










