<一覧に戻る

Pythonで学ぶオブジェクト指向のオーバーライド(Override)

Pythonのオブジェクト指向では、継承を使って既存のクラスの機能を再利用しつつ、必要な部分だけを書き換えることができます。

その書き換える操作が オーバーライド(メソッドの上書き)です。

ここでは、IT初心者の方向けにオーバーライドをわかりやすく、読みやすい文章で丁寧に解説します。

メソッドのオーバーライドの基本

オーバーライドとは、親クラスで定義されたメソッドと同じ名前のメソッドを子クラスで再定義し、動作を上書きすることです。

子クラスが親クラスからメソッドを引き継ぎつつ、振る舞いを変えたいときに使います。これにより、同じメソッド名で異なる動作を実現でき、プログラム全体の設計が柔軟になります。

以下の例では、Animal という親クラスと、その子クラスである Dog と Cat を定義します。

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return "ワーワーと泣きます。"

class Dog(Animal):
    def speak(self):
       return f"{self.name}はワンワンと鳴きます。"

class Cat(Animal):
    def speak(self):
        return f"{self.name}はニャーニャーと鳴きます。"

pochi = Dog("ポチ")
mike = Cat("ミケ")

print(pochi.speak()) # 出力:ポチはワンワンと鳴きます。
print(mike.speak())  # 出力:ミケはニャーニャーと鳴きます。

このコードでは、まず Animal クラス を定義しています。動物という共通の性質を持たせるために、init メソッドで名前を受け取り、その名前をインスタンスの属性として保持します。

そして、speak メソッドを定義していますが、この時点では「ワーワーと泣きます」と、抽象的で汎用的な鳴き方を返すようになっています。

次に、Animal クラスを継承して Dog クラス を作成しています。ここでは speak メソッドを上書きしており、犬らしい鳴き方に変更しています。 具体的には、インスタンスの名前を取り出して「〇〇はワンワンと鳴きます」と返すようになっています。

同じように、Animal クラスを継承した Cat クラス も定義しています。 こちらも speak メソッドをオーバーライドしており、猫らしく「〇〇はニャーニャーと鳴きます」と表示されるようにしています。

最後に、Dog("ポチ")で犬のインスタンスを、Cat("ミケ")で猫のインスタンスを作成し、それぞれの speak メソッドを呼び出しています。

出力結果は「ポチはワンワンと鳴きます」と「ミケはニャーニャーと鳴きます」となり、同じ speak というメソッドでも、クラスごとに異なる振る舞いをしていることが分かります。

メソッドのオーバーライドの意義

メソッドのオーバーライドは、以下のような利点があります。

  • 柔軟性の向上: 子クラスで親クラスのメソッドをカスタマイズすることで、特定の動作を持つオブジェクトを作成できます。
  • コードの再利用: 親クラスのメソッドをそのまま使うこともできるため、共通の機能を持つクラスを簡潔に作成できます。
  • ポリモーフィズムの実現: 同じメソッド名で異なる動作を持つオブジェクトを扱うことができ、コードの可読性やメンテナンス性が向上します。

まとめ

メソッドのオーバーライドは、オブジェクト指向プログラミングの重要な概念であり、クラスの設計において非常に有用です。親クラスのメソッドを子クラスで再定義することで、柔軟で再利用可能なコードを実現できます。オーバーライドを理解し、活用することで、より効率的なプログラムを書くことができるようになります。

出力結果: