Документ Python о MRO не так?

Я прочитал этот документ сегодня. Что-то меня смутило.

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

В примере, чтобы доказать MRO Python 2.2 нарушает монотонность,

>>> 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

и док сказал, что этот пример первоначально предоставлен Самуэль Педрони здесь, и ответ Самуэль Педрони такой же, как и у меня.

Я что-то пропустил?

1 ответ

Решение

Я думаю, что результат, который 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'>)
>>>

Так что MRO для Z является Z K1 K3 A K2 D B C E objectтак что документы вроде бы правильные.

Другие вопросы по тегам