super(Class, obj) 的正式用法:
Class:告诉 super 从哪个类的父类 开始找方法(通常写当前类名)。
obj:必须是 Class 或其子类的实例,super 会把该
实例当成 self 传给父类方法。
class Parent:
def show(self): print("Parent")
class Child(Parent):
def show(self):
s = super(Child, self) # 从 Parent 开始找
s.show() # 等价于 Parent.show(self)
Child().show() # 输出 Parent
Python 3 可简写 super(),效果完全等同。
在类外部直接使用 super() 无参数形式是不行的,只有在类的方法内部才能使用简化形式 super()。让我详细解释这种限制的原因以及如何在不同场景中正确使用:
为什么类外部不能直接用 super()?
super() 无参数形式依赖 Python 的运行时上下文:
自动获取当前类(通过函数调用栈)
自动获取当前实例(self 或类方法的 cls)
在类外部,Python 无法自动获取这些上下文信息