super()
函数是用于调用父类(超类)的一个方法。
super是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
-
单继承
新类继承自单个类。
简单理解为,super()指代父类,用以调用父类的方法
-
多继承
多继承指继承自不止一个类
class A(): pass class B(): pass class C(A,B): pass
-
super()
调用super()其实是实例化了一个super类。
super()
实际上就是:提供一个 MRO 列表以及一个 MRO 中的类 , super()
将返回一个从 MRO 列表中 C
之后的类中查找方法的对象。
super()
函数的一个常见用法是在 __init__()
方法中确保父类被正确的初始化了
本文只是记录学习,真正的理解参见文末附录。