Python 内建函数列表 > Python 的内置函数 super
Python 的内置函数 super() 是一个非常重要的内置函数,主要用于在子类中调用父类(超类)的方法。这个函数在面向对象编程中扮演着关键角色,特别是在处理继承关系时。
super() 最常见的用法是在子类的初始化方法中调用父类的初始化方法:
class Parent:
def __init__(self, name):
self.name = name
class Child(Parent):
def __init__(self, name, age):
super().__init__(name) # 调用父类的__init__方法
self.age = age
方法解析顺序(MRO):super() 遵循 Python 的方法解析顺序(Method Resolution Order),这个顺序可以通过 ClassName.__mro__ 查看
动态绑定:super() 返回的是一个代理对象,它会根据当前的方法解析顺序来查找方法
两种调用形式:
Python 3 中可以直接使用 super()
Python 2 中需要显式传入类名和实例:super(Child, self)
多重继承:在多重继承的情况下,super() 可以确保所有父类的方法都被正确调用
class A:
def method(self):
print("A method")
class B(A):
def method(self):
print("B method")
super().method()
class C(A):
def method(self):
print("C method")
super().method()
class D(B, C):
def method(self):
print("D method")
super().method()
d = D()
d.method() # 输出顺序:D -> B -> C -> A
类方法中的使用:
class Parent:
@classmethod
def create(cls):
return cls()
class Child(Parent):
@classmethod
def create(cls):
obj = super().create()
obj.extra = "value"
return obj
Python 2 和 3 的区别:Python 2 中必须显式传递参数,Python 3 可以省略
单继承和多继承:在单继承中,super() 的行为直观;在多继承中,需要理解 MRO 才能正确使用
不要滥用:只有在确实需要调用父类方法时才使用 super()
初始化父类状态
扩展父类方法
实现协作式多重继承
代理模式实现
super() 是 Python 实现面向对象编程中方法重载和扩展的重要机制,正确理解和使用它可以帮助开发者编写更清晰、更易维护的代码。