Документ 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
так что документы вроде бы правильные.