Python多继承时super未初始化所有父类的坑

Python多继承时super未初始化所有父类的坑

super与手动初始化父类(这种方式比较明显,但不优雅)

'''
Python 多继承,使用 super 方法只能初始化第一个MRO顺序的父类!
'''
class A:def __init__(self):print("A init")class B:def __init__(self):print("B init")class C1(A, B):def __init__(self):# 这样只会调用 A 的初始化方法super().__init__()class C2(A, B):def __init__(self):# Notice 多继承的情况下,可以选择手动调用父类的初始化方法!A.__init__(self)B.__init__(self)c1 = C1()
'''
A init
'''
c2 = C2()
'''
A init
B init
'''

“协作继承原则”——父类也要用super(这种方式比较隐晦)

'''
Python 多继承 的 协作继承原则
'''class A:def __init__(self):super().__init__()print("A init")class B:def __init__(self):super().__init__()print("B init")class C1(A, B):def __init__(self):super().__init__()c1 = C1()
'''
B init
A init
'''

"组合优于继承"

class A:def __init__(self):super().__init__()print("A init")class B:def __init__(self):super().__init__()print("B init")class C1:def __init__(self):self.a = A()self.b = B()c1 = C1()
'''
A init
B init
'''

~~~