【发布时间】:2013-01-04 22:19:31
【问题描述】:
在Python webpage 的文档中,python 中经典类的方法解析顺序被描述为深度优先的从左到右搜索。我试图用这段代码对此进行测试:
class A(object):
def __init__(self):
print "Initialized A"
class B(A):
def test():
print "Initialized B"
class C(A):
def __init__(self):
print "Initialized C"
class D(B, C):
def __init__(self):
super(D, self).__init__()
print "Initialized D"
当我创建对象 D 的实例时:
D()
我得到了结果:
Initialized C
Initialized D
虽然我期望打印“Initialized A”、“Initialized D”,因为 MRO 是深度优先的,但初始化首先在 B 中搜索,当未找到时(就是这种情况),它应该在层次结构中更深,并且在 B 的基类(即 A)中查找函数。有人能解释一下为什么我得到 C 的 init 函数而不是 A 的那个吗?
【问题讨论】:
标签: python multiple-inheritance method-resolution-order