Pythonのポリモーフィズムとは?オーバーライド・オーバーロードを初心者向けにやさしく解説
生徒
「Pythonのオブジェクト指向で、ポリモーフィズムって言葉が出てきたんですが、何のことか全然わかりません…」
先生
「ポリモーフィズムは、同じ名前の操作でも、使う相手によって動きが変わる仕組みのことです。」
生徒
「同じなのに、動きが変わるんですか?」
先生
「はい。まずは身近なたとえから、ゆっくり説明していきましょう。」
1. ポリモーフィズムとは何か?
Pythonのポリモーフィズムとは、同じ名前のメソッドや処理を使っても、対象によって動作が変わる性質のことです。 ポリモーフィズムは日本語では「多態性」と呼ばれます。 難しそうな言葉ですが、意味はとてもシンプルです。
例えば「押す」という行動を考えてみてください。 テレビのリモコンを押すとチャンネルが変わり、 自動販売機のボタンを押すと飲み物が出てきます。 同じ「押す」でも、結果は相手によって違います。 これがポリモーフィズムの考え方です。
Pythonのオブジェクト指向プログラミングでは、 クラスやメソッドを共通の名前で扱えるようにすることで、 プログラムをわかりやすく、柔軟に書けるようになります。
2. なぜポリモーフィズムが必要なのか
ポリモーフィズムを使う理由は、 プログラムをシンプルに書けるからです。
もしポリモーフィズムがなければ、 対象ごとに違う名前の処理を用意する必要があります。 そうすると、コードは長くなり、読みにくくなります。
ポリモーフィズムを使えば、 「同じ操作は同じ名前で呼び出す」ことができます。 その結果、Pythonのコードは短くなり、 初心者でも流れを追いやすくなります。
3. Pythonにおけるオーバーライドとは?
オーバーライドとは、 親クラスで定義されたメソッドを、子クラスで上書きすることです。 これはポリモーフィズムを実現する代表的な方法です。
親クラスとは「共通の設計図」、 子クラスとは「それを元にした具体的なクラス」です。 子クラスでは、親クラスと同じ名前のメソッドを書き直すことで、 動作を変えることができます。
4. オーバーライドの基本例
動物が鳴く例で考えてみましょう。 どの動物も「鳴く」動作はしますが、鳴き声は違います。
class Animal:
def speak(self):
print("何かの音を出します")
class Dog(Animal):
def speak(self):
print("ワンワン")
class Cat(Animal):
def speak(self):
print("ニャーニャー")
ワンワン
ニャーニャー
speakという同じ名前のメソッドを呼び出していますが、
実際の動きはクラスによって変わっています。
これがPythonのオーバーライドであり、ポリモーフィズムです。
5. ポリモーフィズムとオーバーライドの関係
ポリモーフィズムは「考え方」、 オーバーライドは「実現方法の一つ」です。
同じ名前のメソッドを使いながら、 クラスごとに違う処理をさせたいとき、 Pythonではオーバーライドを使います。 これにより、プログラム全体の構造がとても整理されます。
6. Pythonのオーバーロードとは?
オーバーロードとは、 同じ名前のメソッドで、引数の数や内容を変えて使うことです。 他のプログラミング言語ではよく使われる考え方です。
ただし、Pythonでは、 引数の違いによる厳密なオーバーロードはありません。 その代わり、柔軟な書き方で同じような動きを実現します。
7. Pythonでのオーバーロード的な書き方
Pythonでは、引数の初期値を使うことで、 オーバーロードのような動きを作れます。
class Calculator:
def add(self, a, b=0):
return a + b
引数が一つでも二つでも足し算できます
このように、一つのメソッドで複数の使い方を受け入れることで、 Pythonらしい柔軟なポリモーフィズムを実現できます。
8. ポリモーフィズムは初心者の理解を助ける
ポリモーフィズムは上級者向けの難しい技術に見えますが、 実は初心者の理解を助けてくれる仕組みです。
同じ名前の操作を使えることで、 「これは何をしているのか」が直感的にわかります。 Pythonのオブジェクト指向プログラミングでは、 ポリモーフィズムを意識するだけで、 コードの読みやすさが大きく変わります。
オーバーライドとオーバーロードの考え方を知っておくことで、 Pythonのクラス設計が自然と身についていきます。 まずは「同じ名前で、違う動き」という感覚を大切にしてください。