Python super() 函数

Python3 内置函数 Python3 内置函数


super() 是 Python 中用于调用父类(超类)方法的内置函数。

在类的继承中,super() 允许你调用父类的方法,实现代码复用和方法扩展。这是 Python 面向对象编程中非常重要的函数。

单词释义super 意为"超级的",这里指父类或超类。


基本语法与参数

语法格式

super()
super(type, object-or-type)

参数说明

  • 参数 type
    • 类型: 类
    • 描述: 要获取父类Proxy的类。
  • 参数 object-or-type
    • 类型: 对象或类
    • 描述: 必须是 type 的实例或子类。

函数说明

  • 返回值: 返回一个代理对象,用于调用父类的方法。
  • 特点: 支持方法解析顺序(MRO),可以正确处理多重继承。

实例

示例 1:在子类中调用父类构造函数

实例

# 父类
class Animal:
    def __init__(self, name):
        self.name = name
        print(f"动物 {self.name} 出生了")

    def speak(self):
        print("动物发出声音")

# 子类
class Dog(Animal):
    def __init__(self, name, breed):
        # 调用父类的 __init__
        super().__init__(name)
        self.breed = breed
        print(f"品种是 {self.breed}")

    def speak(self):
        # 调用父类的方法
        super().speak()
        print("汪汪!")

# 测试
dog = Dog("小白", "哈士奇")
# 输出:
# 动物 小白 出生了
# 品种是 哈士奇

dog.speak()
# 输出:
# 动物发出声音
# 汪汪!

运行结果预期:

动物 小白 出生了
品种是 哈士奇
动物发出声音
汪汪!

代码解析:

  1. super().__init__(name) 调用父类的构造函数。
  2. super().speak() 调用父类的方法。
  3. 这样可以在子类中扩展父类的功能。

示例 2:多重继承

实例

# 多重继承示例
class A:
    def method(self):
        print("A.method")

class B(A):
    def method(self):
        print("B.method")
        super().method()  # 调用 A.method

class C(A):
    def method(self):
        print("C.method")
        super().method()  # 调用 A.method

class D(B, C):
    def method(self):
        print("D.method")
        super().method()  # 按 MRO 顺序调用

# MRO: D -> B -> C -> A
d = D()
d.method()
# 输出:
# D.method
# B.method
# C.method
# A.method

# 查看 MRO
print(D.__mro__)

运行结果预期:

D.method
B.method
C.method
A.method
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

代码解析:

  • super() 按照 MRO(方法解析顺序)调用。
  • 这确保了多重继承的正确性。

示例 3:不使用参数(推荐)

实例

# Python 3 推荐用法:无需参数
class Parent:
    def greet(self, name):
        return f"你好, {name}!"

class Child(Parent):
    def greet(self, name):
        # 调用父类方法并扩展
        message = super().greet(name)
        return message + " 欢迎回来!"

child = Child()
print(child.greet("Tom"))
# 输出: 你好, Tom! 欢迎回来!

运行结果预期:

在实际环境中运行会显示扩展后的问候语。

super() 是 Python 中实现类继承和多态的关键函数。


Python3 内置函数 Python3 内置函数