手记

Python 的内置函数 super

Python 的内置函数 super() 是一个非常重要的内置函数,主要用于在类的继承关系中调用父类(超类)的方法。它提供了一种优雅的方式来访问父类的属性和方法,而无需显式地指定父类的名称。

基本用法

super() 通常用于子类方法中,调用父类的同名方法。基本语法为:

super().method_name(args)

工作原理

  1. super() 会返回一个代理对象,它会按照方法解析顺序(MRO)查找父类的方法
  2. 在 Python 3 中,可以简写为 super(),而不需要像 Python 2 那样传递类名和 self 参数
  3. 它常用于 __init__ 方法中,确保父类的初始化逻辑得到执行

典型应用场景

  1. 初始化父类
class Parent:
    def __init__(self):
        self.value = 42

class Child(Parent):
    def __init__(self):
        super().__init__()  # 调用父类的 __init__
        self.child_value = 100
  1. 方法重写
class Parent:
    def show(self):
        print("Parent method")

class Child(Parent):
    def show(self):
        super().show()  # 先调用父类方法
        print("Child method")
  1. 多重继承
class A:
    def show(self):
        print("A")

class B(A):
    def show(self):
        print("B")
        super().show()

class C(A):
    def show(self):
        print("C")
        super().show()

class D(B, C):
    def show(self):
        print("D")
        super().show()

注意事项

  1. super() 的工作依赖于方法解析顺序(MRO),可以使用 ClassName.__mro__ 查看
  2. 在静态方法中不能直接使用 super()
  3. 在 Python 2 中,语法为 super(Child, self).method()
  4. 过度使用 super() 可能导致代码难以理解,特别是在复杂的多重继承场景中

与直接调用父类的区别

相比直接使用父类名调用方法(如 Parent.method(self)),super() 的优势在于:

  1. 自动处理多重继承情况
  2. 当父类名改变时,不需要修改所有调用点
  3. 遵循 MRO 顺序,确保方法调用顺序正确

super() 是 Python 面向对象编程中实现代码复用和扩展的重要工具,合理使用可以使继承结构更加清晰和灵活。

0人推荐
随时随地看视频
慕课网APP