【问题标题】:the searching order of inheritance in python [duplicate]python中继承的搜索顺序[重复]
【发布时间】:2015-08-03 16:11:55
【问题描述】:

在搜索属性时,Python 会首先在对象 g 中查找。如果我给下图中命名的每个类编号(2=2nd、3=3rd 等),谁能告诉我所有这些类的搜索顺序。

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

【问题讨论】:

    标签: python inheritance


    【解决方案1】:

    这个订单:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多