Python

【Python】第5章第5回:継承と多重継承の基本

本記事では、Pythonにおける「継承」と「多重継承」の基本的な概念と使い方を解説します。これらの技術を理解することで、コードの再利用性や設計力を大幅に向上させることができます。

0. 記事の概要

この記事を読むメリット

  • 継承の基本を理解:コードの再利用性を高める手法を学べます。
  • 多重継承の応用力向上:複数クラスからの機能継承を効果的に使う方法を習得できます。
  • 設計スキルの向上:オブジェクト指向プログラミングの本質を理解できます。

この記事で学べること

  • 継承の基本的な概念と実装方法
  • 多重継承の仕組みとその注意点
  • Python特有のMRO(Method Resolution Order)について

1. 継承とは?

1.1 継承の定義

継承は、既存のクラス(親クラス)の機能を、新しいクラス(子クラス)に引き継ぐ仕組みです。これにより、親クラスで定義されたメソッドや属性を子クラスがそのまま利用できます。

1.2 継承のメリット

  • コードの再利用性を向上
  • 重複コードの削減
  • 拡張性のある設計が可能

2. 多重継承の基本

2.1 多重継承とは?

多重継承は、1つの子クラスが複数の親クラスから機能を引き継ぐ仕組みです。Pythonでは以下のように実装できます。

# 多重継承の例
class Parent1:
    def method1(self):
        print("Parent1のメソッド")

class Parent2:
    def method2(self):
        print("Parent2のメソッド")

class Child(Parent1, Parent2):
    pass

child = Child()
child.method1()  # Parent1のメソッド
child.method2()  # Parent2のメソッド
動作解説
  1. ChildクラスはParent1Parent2を継承しています。
  2. 親クラスのメソッドがそのまま子クラスで使用可能です。

2.2 MRO(Method Resolution Order)

多重継承では、MRO(メソッド解決順序)が重要です。これは、Pythonがどの順序でメソッドを探索するかを定義するルールです。

# MROの確認
print(Child.__mro__)
# 結果: (, , , )

3. 継承と多重継承の活用例

3.1 実践例:動物クラスの継承

# 動物クラスの継承例
class Animal:
    def speak(self):
        print("何か音を出します")

class Dog(Animal):
    def speak(self):
        print("ワンワン")

class Cat(Animal):
    def speak(self):
        print("ニャー")

dog = Dog()
cat = Cat()

dog.speak()  # ワンワン
cat.speak()  # ニャー
動作解説
  1. 親クラスAnimalのメソッドspeakを子クラスDogCatでオーバーライドしています。
  2. それぞれのクラスで異なる動作を実現しています。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 「Vehicle」という親クラスを作成し、moveメソッドを定義してください。
  2. 「Car」と「Bike」という子クラスを作成し、それぞれmoveメソッドをオーバーライドしてください。

5. 練習問題の解答と解説

問1の解答例

# Vehicleクラス
class Vehicle:
    def move(self):
        print("移動します")

問2の解答例

# CarとBikeクラス
class Car(Vehicle):
    def move(self):
        print("車が走ります")

class Bike(Vehicle):
    def move(self):
        print("バイクが走ります")

6. まとめ

継承と多重継承は、オブジェクト指向プログラミングの強力な機能です。これらを理解することで、より柔軟で再利用性の高いコードを作成できます。練習問題を通じて、実践的なスキルを磨いてください。