在搜索属性时,Python查找对象g 1st。如果我为下面图中命名的每个类编号(2 = 2,3 = 3等),任何人都可以告诉我搜索所有这些类的顺序。
class A : pass
class B : pass
class C(A,object): pass
class D: pass
class E(D,B): pass
class F(B,C): pass
class G(E,F): pass
g = G()
答案 0 :(得分:3)
此订单:
>>> G.__mro__
(<class '__main__.G'>, <class __main__.E at 0x028412D0>, <class __main__.D at 0x
02841298>, <class '__main__.F'>, <class __main__.B at 0x02841260>, <class '__mai
n__.C'>, <class __main__.A at 0x02841228>, <type 'object'>)
>>> print ', '.join(klass.__name__ for klass in G.__mro__)
G, E, D, F, B, C, A, object
如果你想知道如何计算这个顺序,那么就没有一个好的,简短的答案。不完整的简短答案是,Python确保子类在基类列表中的超类和类之前出现在类的基类列表之后。答案很长的是40-page document about C3 linearization on python.org,尽管实际的算法不是40页。