\

Pythonでは、一つのクラスが複数のスーパークラスから継承することが可能です。これを多重継承と呼びます。

多重継承の基本

Pythonの多重継承は、クラス定義で基底クラスを複数記述することで実現します。以下に基本的な例を示します。

class A:
    def hello(self):
        print('Hello from A')

class B(A):
    pass

class C(A):
    def hello(self):
        print('Hello from C')

class D(B, C):
    pass

この例では、Aクラスを大本のクラスとして定義し、その直接の派生クラスとしてBクラスとCクラスを定義しています。そして、それら2つのクラスを基にDクラスを定義しています。

メソッドの解決順序

多重継承を行った場合、同名のメソッドが複数のスーパークラスに存在すると、どのメソッドが呼び出されるかが問題になります。Pythonでは、この問題を解決するために「メソッド解決順序」(Method Resolution Order、MRO)という仕組みを採用しています。

MROは、サブクラスからスーパークラスへと向かってメソッドを探していき、最初に見つかったメソッドが呼び出されます。Pythonでは、MROは「C3線形化」と呼ばれるアルゴリズムを用いて決定されます。

まとめ

Pythonの多重継承は、一つのクラスが複数のスーパークラスから継承することを可能にします。しかし、同名のメソッドが複数のスーパークラスに存在する場合、どのメソッドが呼び出されるかを決定するための「メソッド解決順序」(MRO)という仕組みが必要となります。Pythonでは、このMROは「C3線形化」というアルゴリズムを用いて決定されます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です