0

我今天读了这个文档。有件事让我很困惑。

http://www.python.org/download/releases/2.3/mro/

在证明 Python 2.2 的 MRO 打破单调性的例子中,

>>> class A(object): pass
>>> class B(object): pass
>>> class C(object): pass
>>> class D(object): pass
>>> class E(object): pass
>>> class K1(A,B,C): pass
>>> class K2(D,B,E): pass
>>> class K3(D,A):   pass
>>> class Z(K1,K2,K3): pass

我认为 Python 2.2 将为 Z 提供线性化的结果是:['Z', 'K1', 'C', 'K2', 'B', 'E', 'K3', 'D', 'A', 'object']但是,文档给出了L[Z,P22] = Z K1 K3 A K2 D B C E O

医生说,这个例子最初是由 Samuele Pedroni in here提供的,Samuele Pedroni 的回答和我的一样。

有什么我错过的吗?

4

1 回答 1

2

我认为 Python 2.2 将为 Z 提供线性化的结果是:['Z', 'K1', 'C', 'K2', 'B', 'E', 'K3', 'D', 'A' , '目的']

为什么你这么想?

快速尝试:

Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object): pass
...
>>> class B(object): pass
...
>>> class C(object): pass
...
>>> class D(object): pass
...
>>> class E(object): pass
...
>>> class K1(A,B,C): pass
...
>>> class K2(D,B,E): pass
...
>>> class K3(D,A):   pass
...
>>> class Z(K1,K2,K3): pass
...
>>> Z.__mro__
(<class '__main__.Z'>, <class '__main__.K1'>, <class '__main__.K3'>, <class '__m
ain__.A'>, <class '__main__.K2'>, <class '__main__.D'>, <class '__main__.B'>, <c
lass '__main__.C'>, <class '__main__.E'>, <type 'object'>)
>>>

所以 MROZZ K1 K3 A K2 D B C E object,所以文档似乎是正确的。

于 2013-08-26T14:48:27.520 回答