2015-05-21 5 views
0

при поиске атрибутов Python смотрит в объект g 1st. Если я номер каждого класса, указанного на рисунке ниже (2 = 2nd, 3 = 3rd и т. Д.), Может ли кто-нибудь показать мне порядок поиска всех этих классов.порядок поиска наследования в python

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

ответ

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 страниц.

+0

Got it. Спасибо. – Jign

Смежные вопросы