【发布时间】:2018-01-29 17:42:23
【问题描述】:
我看了Python的documentation,看不懂这条信息
class DerivedClassName(Base1, Base2, Base3): <statement-1> . . . <statement-N>对于大多数目的,在最简单的情况下,您可以考虑搜索 对于从父类继承为深度优先的属性, 从左到右,不在同一个类中搜索两次 在层次结构中重叠。因此,如果在
DerivedClassName,在Base1中搜索,然后(递归)在Base1的基类,如果在那里找不到,那就是 在Base2中搜索,以此类推。
如果是new-style class,为什么Python会在Base1的基类中递归搜索,而不是先到Base2再到Base3?
class A(object):
attr = 1
class B(A):
pass
class C(A):
attr = 2
class D(B,C):
pass
x = D()
print(x.attr)# 2
Mark Lutz 书中的示例。 Python 进入 D,然后是 B,然后是 C。
【问题讨论】:
-
不清楚您为什么认为您的示例与描述不一致。另外,请使用适当的块引用格式来阐明什么是引用(并具体包括从哪里来)。
-
您是否在问为什么
C在解析顺序中排在A之前?如果是这样,答案是顺序不只是Python 3中的深度优先搜索。(因此对冲:“对于大多数目的,在最简单的情况下,您可以想到...” 因此,您的引用之后的下一行:“事实上,它比那更复杂...”) -
教程就是这样。它说“对于大多数用途,在最简单的情况下,您可以认为搜索从父类继承的属性... ”。这显然不是说描述是完全准确或笼统的。
标签: python python-3.x multiple-inheritance