首页 > 解决方案 > Python中的方法解析顺序-在子类和父类左类中没有构造函数

问题描述

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

C(A,B) - 多重继承。

在子类 C 和父左类 A 中没有构造函数的情况下,python 引擎是否从 RHS 类 B 中查找构造函数并在存在时执行它,或者它是否查看 A 是否有任何父类构造函数?

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

标签: python

解决方案


class A:
    pass

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

class C(A, B):
    pass

print(C())
I am class B

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

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())
I am class A

可以看到,B__init__没有被调用,这是因为父类是从左到右调用的,但是每个类都不能忘记调用“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())
I am class A
I am class B

推荐阅读