所以我一直在对 Python 2.7 多重继承和 MRO 的美妙世界进行一些研究,并且在阅读时我一直在尝试不同的示例,我遇到了一些让我非常困惑的事情。
这样你就有了经典的钻石 MI 示例:
class A:
def __init__(self):
print "A"
class B(A):
pass
class C(A):
def __init__(self):
print "C"
class D(B, C):
pass
instance = D()
在我读过的所有 MRO 资源中,这个例子应该有一个 DBCA 的 MRO,所以初始化 D 应该打印“C”,但它会打印“A”。奇怪的是,当我将 A、B、C 或 D 的定义更改为类似它的子类时,int
它给了我打印“C”的预期行为
为什么类结构的 MRO 行为会根据基类是否为原始类型而有所不同?这是一个错误吗?