https://www.cnblogs.com/poloyy/p/15223443.html
class A: def test(self): print("AAA") class B: def test(self): print("BBB") class C(A, B): def test(self): print("CCC") super().test() c = C() c.test() # 输出结果 CCC AAA
根据 MRO,super() 很明显调用的是 A 类的 test() 方法
假设想调用 B 类的 test() 方法,要怎么做呢?
class C(A, B): def test(self): print("CCC") super().test() B.test(self) # 输出结果 CCC AAA BBB
通过 父类名.方法名() 即可,但这样和 super() 混用,不是一个好编码习惯,具体看下面
class A: def __init__(self): print("A", end=" ") super().__init__() class B: def __init__(self): print("B", end=" ") super().__init__() class C(A, B): def __init__(self): print("C", end=" ") A.__init__(self) B.__init__(self) print("MRO:", [x.__name__ for x in C.__mro__]) C() # 输出结果 MRO: ['C', 'A', 'B', 'object'] C A B B
B 类的 __init__() 方法被调用了两次