ダイアモンド継承と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()
となったみたい。