文章参考来源彻底搞懂python super函数的作用写的很易懂比我写的详细
super()`是在方法解析顺序(MRO)列表中调用下一位的方法,python的多重继承是按照MRO的顺序来继承的
MRO列表原则
-
子类永远在父类前面
-
如果有多个父类会按照它们在列表的顺序检查
-
如果下一个类有两个合法选择,选择第一个
class Base(object): def __init__(self): print("enter Base") print("leave Base") class A(Base): def __init__(self): print("enter A") super(A,self).__init__() print("leave A") class B(Base): def __init__(self): print("enter B") super(B,self).__init__() print("leave B") class C(A,B): def __init__(self): print("enter C") super(C,self).__init__() print("leave C")
创建一个对象c=C()
此时MRO列表顺序为C->-A->-B->Base->object可以用print(C.mro())来查看
如果不用super(A,self)而用Base.__init__()的话,那么当C的实例被创建时会调用两次Base的构造函数
而A类当中的super(A,self)中的self依旧是调用这个函数的c对象而不是A的对象,所以此时的MRO列表为C->-A->-B->Base->object而不是A->base->object