Shishou Engineering Blog

Aim for Full Stack Engineer.

Pythonの多重継承

ちょっとPythonで多重継承を使うことがあったので、まとめを書いておきます。

以下のような親クラスと子クラスの関係で、それぞれ親クラスの初期化処理やメソッドを呼び出してみました。

class A(object):
    def __init__(self):
        print 'Initialize A.'

    def method(self):
        print 'Call A method.'

class B(object):
    def __init__(self):
        print 'Initialize B.'

    def method(self):
        print 'Call B method.'

class C(object):
    def __init__(self):
        print 'Initialize C.'

    def method(self):
        print 'Call C method.'
class Main(A, B, C):
    def __init__(self):
        print('Initialize Main.')
        super(Main, self).__init__()
        super(A, self).__init__()
        super(B, self).__init__()
        
    def method(self):
        print('Call Main method')
        super(Main, self).method()
        super(A, self).method()
        super(B, self).method()
        
m = Main()
m.method()    

実行結果は以下のようになります。

Initialize Main.
Initialize A.
Initialize B.
Initialize C.
Call Main method
Call A method.
Call B method.
Call C method.

親クラスのメソッドを呼び出す際にはsuper()を使用しますが、多重継承の場合は左から順番に1個左のクラスを指定することで任意の親クラスのメソッドを呼び出すことができます。

しかし、何かしら理由があるのだと思いますが、このインターフェースは使いにくいですね笑

super()に使用したいクラス名を指定するようにすればよかったのに・・

 

2018-02-19 01:59:50


About
@hiroki8080

京都在住のフリーランスエンジニアです。

ITやIoT, 自作のCMS開発に関することを書いていきます。


主なスキル

Python, Java, C#

AWS, Unity

アプリケーション、フレームワーク、

ライブラリの設計、開発

お仕事のご依頼について

お仕事のご相談・ご依頼などありましたら、

お気軽にお問い合わせください。

e-mail:hiroki-m@gaia.eonet.ne.jp