python - 为什么当一个子类继承/不继承 Python 中的第三个类时,这个类的 MRO 会发生变化?
问题描述
我试图更好地理解 Python 中的 MRO 并遇到了这个例子:
class A:
def process(self):
print('A process()')
class B(A):
pass
class C(A):
def process(self):
print('C process()')
class D(B,C):
pass
obj = D()
obj.process()
打印“C 进程()”。我明白为什么,因为顺序是 D>B>C>A。但是,当类 C 不继承 A 时,会打印“A process()”并且顺序变为 D>B>A>C。是什么导致订单在这里转移?为什么现在没有在 A 类之前达到 C 超类?
解决方案
C3 线性化算法在某种程度上是深度优先的,因此在 之前添加了A
可从B
(之前C
在基类列表中列出)C
。
基本原理是它D
更像“B-like”而不是“C-like”,所以任何属于“B”的部分都应该出现在“C”之前。
(为了好玩,看看如果你尝试类似class D(B, A, C)
whenC
仍然继承自 的东西会发生什么A
。)
推荐阅读
- html - URL参数“/?gtnjs=1”是什么意思?
- php - 在重力表格上的段落字段中添加前缀
- java - 两个带有 viewpager 的相同 Activity 实例同时运行
- java - Intellij IDEA Ultimate android 布局预览不工作等待构建完成
- java - 动态向 HashMap 输入数据
- sass - 无法使用 predix px-button-group-design 组件
- java - Twitter4J:投票/投票支持
- c# - 如何将匿名类型转换为列表
在 C# 中使用 Linq to SQL - html - html css img 分辨率操作
- c++ - /usr/bin/ld: 找不到 -l
编译时出错(没有 sudo)