Pythonでは、一つのクラスが複数の基底クラスを継承することが可能です。これを多重継承と呼びます。
多重継承とは
多重継承とは、「複数のクラスからその機能を継承する」ことを指します。例えば、「AクラスとBクラスを基にCクラスを作成する」のがそうです。
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クラスを定義しています。
メソッドの解決順序(MRO)
多重継承を行った際に、どのクラスのメソッドが呼び出されるかは、「メソッドの解決順序」(Method Resolution Order:MRO)によって決まります。
Pythonでは、MROは「C3線形化」と呼ばれるアルゴリズムを用いて決定されます。このアルゴリズムは、メソッド検索の中であるクラスが何度も登場することがないようになっています。
まとめ
Pythonの多重継承は、複数のクラスの機能を一つのクラスに統合する強力な機能です。しかし、その使用は慎重に行う必要があります。多重継承の順序やMROによって、プログラムの挙動が大きく変わる可能性があるからです。