Pythonでクラスを多重継承する方法

2021/01/27PythonPythonの基本

記事内に広告が含まれています。

Pythonではクラスの多重継承がサポートされています。

クラスの多重継承は1つのサブクラス(子クラス)が複数のベースクラス(親クラス)を継承する方法です。

Pythonでのクラスの多重継承

Pythonでクラスを多重継承(複数のベースクラス(親クラス)を継承)するにはサブクラス(子クラス)の宣言の引数に継承するベースクラス(親クラス)名をカンマで区切って列挙します。

下記では、ベースクラス(親クラス)ParentClassA , ParentClassB 両方を継承するサブクラス(子クラス)Childを定義しています。

class ParentClassA :
    def methodA( self ) :
        print( "ParentClassA:methodA()" )

class ParentClassB :
    def methodB( self ) :
        print( "ParentClassB:methodB()" )

class Child(ParentClassA , ParentClassB ):
    pass

cl = Child()
cl.methodA()  # ParentClassA のメソッドmethodAを呼出す
cl.methodB()  # ParentClassB のメソッドmethodBを呼出す

上記の実行結果は

ParentClassA:methodA()
ParentClassB:methodB()

となりサブクラス(子クラス)Childはベースクラス(親クラス)ParentClassA , ParentClassB両方のメソッドを継承していることがわかります。

同一名のメソッドがベースクラス(親クラス)に存在する場合

複数のベースクラス(親クラス)を継承した場合、同じメソッド名が複数定義されている可能性があります。

例えば

class ParentClassA :
    def methodC( self ) :
        print( "ParentClassA:methodC()" )

class ParentClassB :
    def methodC( self ) :
        print( "ParentClassB:methodC()" )

class Child1( ParentClassA, ParentClassB ):
    pass

のようなケース。

こんな時はどちらのメソッドが呼ばれるのでしょうか?

実験してみます。


class ParentClassA :
    def methodC( self ) :
        print( "ParentClassA:methodC()" )

class ParentClassB :
    def methodC( self ) :
        print( "ParentClassB:methodC()" )

class Child1( ParentClassA, ParentClassB ):
    pass

class Child2( ParentClassB, ParentClassA ):
    pass

cl1 = Child1()
cl1.methodC()  # メソッドmethodCを呼出すとParentClassB のものが呼ばれる

cl2 = Child2()
cl2.methodC()  # メソッドmethodCを呼出すとParentClassB のものが呼ばれる

として、

  • Child1はParentClassA, ParentClassBの順番
  • Child2はParentClassB, ParentClassAの順番

でベースクラス(親クラス)を継承した場合の動作は

ParentClassA:methodC()
ParentClassB:methodC()

となり、継承時に先に書いた方のメソッドがコールされています。

実際のプログラミングではこのようなことが起こらないように注意してコーディングしましょう。

まとめ

Pythonではクラスの多重継承がサポートされており、サブクラス(子クラス)の宣言の引数に継承するベースクラス(親クラス)名をカンマで区切って列挙します。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ