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