代码点读机 / Python / super

super Python · 内置函数

`super` 在子类中调用父类的方法或构造函数。就像孩子需要父母帮忙时,通过小天才儿童电话手表找到父母来解决问题。使用 `super` 可以避免显式写出父类名字,方便维护。

怎么用

super().方法名(参数)

小例子

class 动物:
    def __init__(self, 名字):
        self.名字 = 名字
    def 叫(self):
        print(f"{self.名字}发出声音")
class 狗(动物):
    def __init__(self, 名字, 品种):
        super().__init__(名字)   # 调用父类构造函数
        self.品种 = 品种
    def 叫(self):
        super().叫()   # 调用父类方法
        print("汪汪汪")
我的狗 = 狗("旺财", "金毛")
我的狗.叫()

运行结果

旺财发出声音
汪汪汪

对比:直接写父类名字

class 狗(动物):
    def __init__(self, 名字, 品种):
        动物.__init__(self, 名字)   # 也能工作,但不够优雅
        self.品种 = 品种
用 `super` 可以自动找到父类,避免重复写类名,特别是多重继承时更有用。

常见使用场景

1. 子类初始化时调用父类初始化:
class 正方形(矩形):
    def __init__(self, 边长):
        super().__init__(边长, 边长)   # 矩形初始化
2. 重写方法时还想保留父类功能:
def 叫(self):
    super().叫()
    print("额外行为")
3. 多重继承中正确处理 MRO(方法解析顺序)。

提醒:- `super()` 只能在类内部使用。 - 在 Python 3 中,`super()` 通常不需要参数。 - 如果父类方法返回一个值,`super()` 调用会返回该值。

官方文档:https://docs.python.org/zh-cn/3/library/functions.html#super

在代码里遇到不认识的词?打开代码点读机,点一下就懂 → ← Python全部词条