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 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
推荐阅读
- python - python中的条件替换和嵌套for循环
- apache-flink - Flink : 如何通过 flink 代码设置任务管理器属性
- java - TreeMap 没有正确排序
- python - 将日期向量转换为范围的 Pythonic 方法?
- jestjs - 在 create-react-app 项目中使用 jest-junit 的测试覆盖率失败
- python - 根据组号创建一个新列表并添加分数
- ios - 在 DIctionary From Tableview 中附加 json 参数
- php - 如果里面有空数组,我如何从数组中删除整个对象?
- prestashop-1.7 - Prestashop 1.7 在 tpl 文件中获取 ajaxProcess 变量
- html - 多个背景图像如何相互叠加?它们真的按照定义的顺序相互叠加吗?