カテゴリ: 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
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
New2
Flask
Flaskアプリのセキュリティ対策まとめ!初心者向けに基本をやさしく解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flaskで外部APIと連携する方法!requestsライブラリの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.3
Java&Spring記事人気No3
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.4
Java&Spring記事人気No4
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.5
Java&Spring記事人気No5
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.6
Java&Spring記事人気No6
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
No.7
Java&Spring記事人気No7
Flask
Flaskで開発中にデータベースを初期化する方法!初心者でもわかる便利なTips
No.8
Java&Spring記事人気No8
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド