カテゴリ: 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
Flask
FlaskでCORS(クロスオリジン)対応を完全解説!初心者でもできるセキュリティ設定と実装方法
New2
Python
Pythonのデコレータ(@decorator)とは?初心者でもわかる関数の拡張方法
New3
Python
PythonでSQLデータベースにインデックスを追加する方法を初心者向けにやさしく解説
New4
Python
Pythonの関数を引数に渡す方法を初心者向けにやさしく解説!高階関数の使い方も完全ガイド
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
No.3
Java&Spring記事人気No3
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.4
Java&Spring記事人気No4
Python
PythonでSQLデータベースのパフォーマンスを向上させる方法|初心者でもわかる高速化の基本
No.5
Java&Spring記事人気No5
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.6
Java&Spring記事人気No6
Flask
FlaskのBlueprintとは?機能ごとに分割して管理する基本設計を学ぼう
No.7
Java&Spring記事人気No7
Flask
Flaskアプリのテスト性を高める設計方法まとめ
No.8
Java&Spring記事人気No8
Django
Django settings.py の役割とよく使う設定を完全解説!初心者でもわかる基本と考え方