Python中的方法解析顺序-在左类的子类和父类中缺少构造函数

Python中的方法解析顺序-在左类的子类和父类中缺少构造函数,python,Python,这是关于Python中的方法解析顺序。假设我们有3个班:A、B、C C(A,B)-多重继承 在子类C中没有构造函数,父类离开了类A的情况下,python引擎是从RHS类B中查找构造函数并在它存在时执行它,还是查看A是否有任何带有构造函数的父类 示例:如果类A继承自具有构造函数的类X,该怎么办。那么X类的构造函数会运行还是B类的构造函数会运行 class A: pass class B: def __init__(self): print("I am class

这是关于Python中的方法解析顺序。假设我们有3个班:A、B、C

C(A,B)-多重继承

在子类C中没有构造函数,父类离开了类A的情况下,python引擎是从RHS类B中查找构造函数并在它存在时执行它,还是查看A是否有任何带有构造函数的父类

示例:如果类A继承自具有构造函数的类X,该怎么办。那么X类的构造函数会运行还是B类的构造函数会运行

class A:
    pass

class B:
    def __init__(self):
        print("I am class B")

class C(A, B):
    pass

print(C())
通过另一个示例,您将更好地了解多重继承的工作原理:

class A:
    def __init__(self):
        print("I am class A")

class B:
    def __init__(self):
        print("I am class B")

class C(A, B):
    pass

print(C())
正如您所看到的,B
\uuuuu init\uuuuu
没有被调用,这是因为父类是从左到右调用的,但是每个父类都不能忘记调用“super init”,否则它会破坏继承链

class A:
    def __init__(self):
        print("I am class A")
        super().__init__()

class B:
    def __init__(self):
        print("I am class B")

class C(A, B):
    pass

print(C())

增加可行的代码将是有益的;如果你添加一点解释和资源顺序,也可以添加更多解释编辑解释你所说的“但是每个人都不能忘记调用”super init“,我指的是父级
\uuu init\uuu
。基于MRO(方法解析顺序),对
super().Method(…)
的调用会自动从继承链调用下一个类的方法。
I am class A
class A:
    def __init__(self):
        print("I am class A")
        super().__init__()

class B:
    def __init__(self):
        print("I am class B")

class C(A, B):
    pass

print(C())
I am class A
I am class B