ダイアモンド継承とsuper()の続き
super()の理解がまだ足りない
先程、【super()で C.talk() が呼び出されるように指定してみる】で
class D(B, C): def talk(self): super(C, self).talk() # C を明示する def main(): d = D() d.talk()
の結果は
This is A.
となったが、これは C.talk() を探したわけではないみたい。
super オブジェクトの意味は、
指定クラスの親クラスを指す
らしく、
super(C, self).talk() は (C の親 = A).talk() を呼び出す。
と動いた。
というのも、
class C(A): def talk(self): print 'This is C.'
としたとき、
This is A.
を返してきたから。
ダイヤモンド継承をしたときの super() の使い方がようわからん。
という訳で、フリダシに戻る。
class D(B, C): def talk(self): C.talk(self)
とすればいいのは、分かってんだけどね。