gae アプリ 開発メモ

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

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

python 2.7 の話。

まずはダイアモンド継承を書く

class A(object):
    def talk(self):
        print 'This is A.'

class B(A):
    def talk(self):
        print 'This is B'

class C(A):
    pass

class D(B, C):
    pass

def main():
    d = D()
    d.talk()

if __name__ == '__main__':
    main()

結果は

This is B

継承順序を入れ替えてみる

class D(C, B): # 順序を入れ替えてみる
    pass

def main():
    d = D()
    d.talk()

結果は

This is B

C.talk() = A.talk()
ではないらしい。

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() = A.talk()
となったみたい。