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
'''

~~~

 

posted on 2025-12-23 12:07  江湖乄夜雨  阅读(2)  评论(0)    收藏  举报