gae アプリ 開発メモ

Google App Engine アプリの開発メモ / 言語: python, javascript / ビギナー

ダイアモンド継承とsuper()の続き

ダイアモンド継承と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)

とすればいいのは、分かってんだけどね。