我是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
我去了以下网络。有没有办法改进它,我是否正确地完成了它?
答案 0 :(得分:0)
就显示您所显示的类之间的继承关系而言,您的图表几乎是正确的。从B
到E
的箭头应朝另一个方向运行,但其他一切都是正确的。
至于基于在类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。