2016-07-20 15 views
0

に私は最近、以下のコードを理解する問題があった: Pythonのスーパー()ネストされた多重継承

class A(object): 
    def __init__(self): 
     print("go A go!") 

class B(A): 
    def __init__(self): 
     super(B, self).__init__() 
     print("go B go!") 

class C(A): 
    def __init__(self): 
     super(C, self).__init__() 
     print("go C go!") 


class D(B,C): 
    def __init__(self): 
     super(D, self).__init__() 
     print("go D go!") 
d = D() 

私が得た結果は次のとおりです。

go A go! 
go C go! 
go B go! 
go D go! 

私は(スーパーの使用を理解します)単純な複数の継承では、私は実際にどのようにこの結果を得たか分からない。

答えて

3

PythonはC3 linearlizationを使用して順序を定義します(メソッド解決順序)。

あなたはスーパーまず、印刷を呼び出しているので、それは(再帰順番を呼び出すための似た)逆の順序で印刷結果

D.__mro__ 
(__main__.D, __main__.B, __main__.C, __main__.A, builtins.object) 

:それは次の順序を作成しました