2016-11-17 23 views
-2
class A : pass 
class B : pass 
class C(A) : pass 
class D(A,B) : pass 
class E(A) : pass 
class F(C,D) : pass 
class G(B) : pass 
class H(E,F,G) : pass 

o = H(),我需要爲H繪製完整的繼承網絡。此外,我需要指出所有類的屬性搜索順序。修復繼承網絡

下面

是我畫的圖片:

enter image description here

我不知道如果我畫的順序是正確的。有人可以幫我解決它嗎?

回答

0

type.mro()會給你的命令:

>>> type.mro(H) 
[__main__.H, 
__main__.E, 
__main__.F, 
__main__.C, 
__main__.D, 
__main__.A, 
__main__.G, 
__main__.B, 
object] 

正如你可以看到你在你的編號的一些誤區。
如果您需要的層次,那麼你可以使用inspect

>>> import inspect 
>>> inspect.getclasstree(inspect.getmro(H)) 
[(object,()), 
[(__main__.A, (object,)), 
    [(__main__.C, (__main__.A,)), 
    [(__main__.F, (__main__.C, __main__.D)), 
    [(__main__.H, (__main__.E, __main__.F, __main__.G))]], 
    (__main__.D, (__main__.A, __main__.B)), 
    [(__main__.F, (__main__.C, __main__.D)), 
    [(__main__.H, (__main__.E, __main__.F, __main__.G))]], 
    (__main__.E, (__main__.A,)), 
    [(__main__.H, (__main__.E, __main__.F, __main__.G))]], 
    (__main__.B, (object,)), 
    [(__main__.D, (__main__.A, __main__.B)), 
    [(__main__.F, (__main__.C, __main__.D)), 
    [(__main__.H, (__main__.E, __main__.F, __main__.G))]], 
    (__main__.G, (__main__.B,)), 
    [(__main__.H, (__main__.E, __main__.F, __main__.G))]]]] 
+0

所以,正確的順序是H - >電子 - >的F - >ç - > d - > A - 「G - >乙? – jiahuiding

+0

是的,'mro'代表方法解析順序。 – AChampion

+0

好的,非常感謝 – jiahuiding