2016-10-05 3 views
0

私は複数のinherirtanceでメソッド解決順序を理解しようとしています。 ここで私が使用しているコードです。クラス 'ClassC'のオブジェクトを作成しようとすると、ClassAのコンストラクタだけが呼び出されます。この場合、メソッドはどのように解決されますか?Pythonの多重継承におけるメソッド解決

class ClassA: 
    def __init__(self): 
     print "inside a's init" 

class ClassB: 
    def __init__(self): 
     print "inside b's init" 

class ClassC(ClassA,ClassB): 
    pass 

c = ClassC() 

出力:

inside a's init 
+0

Python 2では新しいスタイルのクラス、例えば 'class ClassA(object):'(Python 3ではすべてのクラスが新しいスタイルです)を使うべきです。そして 'ClassA'の' .__ init__'メソッドに 'super(ClassA、self).__ init __()'を追加します。 (同様の呼び出しを 'ClassB'に追加することもできますが、' ClassB'は 'ClassC'の継承連鎖の終わりなので、不要です。リンクされた質問の中のPythonコア開発者Raymond Hettingerの答えが完全にあなたの質問に答えることができない場合は、私に教えてください。 –

+0

これは役に立ちました@ PM2Ring。ありがとう – Heisenberg

答えて

0

私はそれが詳細にMROアルゴリズムをカバーしていますが、それはかなり複雑だと考えているPythonのPEPがあります。さらに、Fluent Pythonの本で取り上げられています。私は短い物語は、それはあなたが

class ClassC(ClassB,ClassA): 
    pass 

に切り替えた場合、私はあなたが変化を見るでしょう賭ける

を左から右へ行くことであると信じています。あなたは

help(c) 

を呼び出す場合は、MROがプリントアウトされるはずです。また

を(更新、あなたは間違いなく変更が表示されます)。

+0

はい。うまくいきました。しかし、私のユースケースは、2番目のクラスのコンストラクタを呼び出すこととは少し違います。解決しました。ありがとうございました! – Heisenberg