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