Python中的继承网络

时间:2015-03-02 02:23:54

标签: python inheritance python-3.x

我是python的新手,我正在尝试为许多类绘制继承网络。我想对图中的每个类进行编号,以对象g = G()中的类对象搜索属性(1 =第一,2 =第二等)的顺序进行编号。以下是我试图模拟的内容:

class A : pass
class C : pass
class B(A,C) : pass
class D(A) : pass
class E(B,C) : pass
class F(C) : pass
class G(D,E,F): pass

我去了以下网络。有没有办法改进它,我是否正确地完成了它?

inheritance diagram

1 个答案:

答案 0 :(得分:0)

就显示您所显示的类之间的继承关系而言,您的图表几乎是正确的。从BE的箭头应朝另一个方向运行,但其他一切都是正确的。

至于基于在类G的实例中查找它们的顺序对图中的类进行编号,我建议调用G.mro()。这将按照搜索顺序为您提供类列表。

以下是我为您的示例类所获得的内容:

[<class '__main__.G'>,
 <class '__main__.D'>,
 <class '__main__.E'>,
 <class '__main__.B'>,
 <class '__main__.A'>,
 <class '__main__.F'>,
 <class '__main__.C'>,
 <class 'object'>]

如果您想了解如何找到此顺序,您应该阅读Python使用的C3 linearization算法。在Python 2.3中引入新算法时,一个好的开始是this article