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 '''
~~~
浙公网安备 33010602011771号