カテゴリ: Python 更新日: 2026/01/21

Pythonのポリモーフィズムとは?オーバーライド・オーバーロードを初心者向けにやさしく解説

Pythonのポリモーフィズムとは?オーバーライド・オーバーロードを解説
Pythonのポリモーフィズムとは?オーバーライド・オーバーロードを解説

先生と生徒の会話形式で理解しよう

生徒

「Pythonのオブジェクト指向で、ポリモーフィズムって言葉が出てきたんですが、何のことか全然わかりません…」

先生

「ポリモーフィズムは、同じ名前の操作でも、使う相手によって動きが変わる仕組みのことです。」

生徒

「同じなのに、動きが変わるんですか?」

先生

「はい。まずは身近なたとえから、ゆっくり説明していきましょう。」

1. ポリモーフィズムとは何か?

1. ポリモーフィズムとは何か?
1. ポリモーフィズムとは何か?

Pythonのポリモーフィズムとは、同じ名前のメソッドや処理を使っても、対象によって動作が変わる性質のことです。 ポリモーフィズムは日本語では「多態性」と呼ばれます。 難しそうな言葉ですが、意味はとてもシンプルです。

例えば「押す」という行動を考えてみてください。 テレビのリモコンを押すとチャンネルが変わり、 自動販売機のボタンを押すと飲み物が出てきます。 同じ「押す」でも、結果は相手によって違います。 これがポリモーフィズムの考え方です。

Pythonのオブジェクト指向プログラミングでは、 クラスやメソッドを共通の名前で扱えるようにすることで、 プログラムをわかりやすく、柔軟に書けるようになります。

2. なぜポリモーフィズムが必要なのか

2. なぜポリモーフィズムが必要なのか
2. なぜポリモーフィズムが必要なのか

ポリモーフィズムを使う理由は、 プログラムをシンプルに書けるからです。

もしポリモーフィズムがなければ、 対象ごとに違う名前の処理を用意する必要があります。 そうすると、コードは長くなり、読みにくくなります。

ポリモーフィズムを使えば、 「同じ操作は同じ名前で呼び出す」ことができます。 その結果、Pythonのコードは短くなり、 初心者でも流れを追いやすくなります。

3. Pythonにおけるオーバーライドとは?

3. Pythonにおけるオーバーライドとは?
3. Pythonにおけるオーバーライドとは?

オーバーライドとは、 親クラスで定義されたメソッドを、子クラスで上書きすることです。 これはポリモーフィズムを実現する代表的な方法です。

親クラスとは「共通の設計図」、 子クラスとは「それを元にした具体的なクラス」です。 子クラスでは、親クラスと同じ名前のメソッドを書き直すことで、 動作を変えることができます。

4. オーバーライドの基本例

4. オーバーライドの基本例
4. オーバーライドの基本例

動物が鳴く例で考えてみましょう。 どの動物も「鳴く」動作はしますが、鳴き声は違います。


class Animal:
    def speak(self):
        print("何かの音を出します")

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

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

ワンワン
ニャーニャー

speakという同じ名前のメソッドを呼び出していますが、 実際の動きはクラスによって変わっています。 これがPythonのオーバーライドであり、ポリモーフィズムです。

5. ポリモーフィズムとオーバーライドの関係

5. ポリモーフィズムとオーバーライドの関係
5. ポリモーフィズムとオーバーライドの関係

ポリモーフィズムは「考え方」、 オーバーライドは「実現方法の一つ」です。

同じ名前のメソッドを使いながら、 クラスごとに違う処理をさせたいとき、 Pythonではオーバーライドを使います。 これにより、プログラム全体の構造がとても整理されます。

6. Pythonのオーバーロードとは?

6. Pythonのオーバーロードとは?
6. Pythonのオーバーロードとは?

オーバーロードとは、 同じ名前のメソッドで、引数の数や内容を変えて使うことです。 他のプログラミング言語ではよく使われる考え方です。

ただし、Pythonでは、 引数の違いによる厳密なオーバーロードはありません。 その代わり、柔軟な書き方で同じような動きを実現します。

7. Pythonでのオーバーロード的な書き方

7. Pythonでのオーバーロード的な書き方
7. Pythonでのオーバーロード的な書き方

Pythonでは、引数の初期値を使うことで、 オーバーロードのような動きを作れます。


class Calculator:
    def add(self, a, b=0):
        return a + b

引数が一つでも二つでも足し算できます

このように、一つのメソッドで複数の使い方を受け入れることで、 Pythonらしい柔軟なポリモーフィズムを実現できます。

8. ポリモーフィズムは初心者の理解を助ける

8. ポリモーフィズムは初心者の理解を助ける
8. ポリモーフィズムは初心者の理解を助ける

ポリモーフィズムは上級者向けの難しい技術に見えますが、 実は初心者の理解を助けてくれる仕組みです。

同じ名前の操作を使えることで、 「これは何をしているのか」が直感的にわかります。 Pythonのオブジェクト指向プログラミングでは、 ポリモーフィズムを意識するだけで、 コードの読みやすさが大きく変わります。

オーバーライドとオーバーロードの考え方を知っておくことで、 Pythonのクラス設計が自然と身についていきます。 まずは「同じ名前で、違う動き」という感覚を大切にしてください。

カテゴリの一覧へ
新着記事
New1
Django
Djangoモデル入門|初心者が最初に知るべきORMの基本操作
New2
Python
Pythonの特殊メソッド(__str__ / __repr__ / __eq__)を便利に使う方法をやさしく解説
New3
Python
Pythonのリストとは?基本の使い方と作成・操作のやり方をやさしく解説
New4
Flask
Flaskのログをファイルに保存する方法!初心者でもわかる設定手順を徹底解説
人気記事
No.1
Java&Spring記事人気No1
Django
Djangoプロジェクトのディレクトリ構造を完全解説!初心者でも迷わないフォルダの見方
No.2
Java&Spring記事人気No2
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.3
Java&Spring記事人気No3
Flask
FlaskアプリのSECRET_KEYの設定方法を完全ガイド!初心者でもわかるセキュリティ対策
No.4
Java&Spring記事人気No4
Python
Pythonで文字列を置換するには?replace()の使い方と正規表現の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.7
Java&Spring記事人気No7
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.8
Java&Spring記事人気No8
Python
Pythonでディレクトリ操作を完全解説!作成・削除・一覧取得の基本