カテゴリ: Python 更新日: 2025/11/24

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

Pythonのポリモーフィズムとは?オーバーライドとオーバーロードの違い
Pythonのポリモーフィズムとは?オーバーライドとオーバーロードの違い

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

生徒

「先生、ポリモーフィズムってなんですか?名前がむずかしくて覚えられません…」

先生

「ポリモーフィズムは日本語で言うと『多態性』のことです。同じ名前のメソッドでも、クラスごとにちがう動きをさせられるしくみです。」

生徒

「同じ名前なのに、動きがちがうんですか?なんだか不思議ですね!」

先生

「そうですね、たとえば“走る”という言葉でも、人・動物・ロボットで走り方がちがうのと同じです。では詳しく見ていきましょう!」

-

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

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

Python(パイソン)のオブジェクト指向プログラミングでは、ポリモーフィズム(polymorphism)はとても重要な考え方です。ポリモーフィズムとは、「同じ名前のメソッド(関数)を、ちがうクラスで使っても、それぞれのクラスに合った動きをするしくみ」です。

たとえば、「動物」というクラスと、「犬」「猫」というクラスがあるとします。「鳴く」というメソッドは同じ名前でも、犬と猫で中身がちがっていてよい、というのがポリモーフィズムの考え方です。

2. メソッドのオーバーライドとは?

2. メソッドのオーバーライドとは?
2. メソッドのオーバーライドとは?

オーバーライド(Override)とは、「親クラスで定義されたメソッドを、子クラスで上書きして使うこと」です。これにより、ポリモーフィズムが実現されます。


class Animal:
    def speak(self):
        print("なにかが鳴いています")

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

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

animals = [Dog(), Cat()]

for a in animals:
    a.speak()

ワンワン
ニャーニャー

このように、親クラスのspeakメソッドを、子クラスで上書き(オーバーライド)して、それぞれの鳴き声を出しています。これがポリモーフィズムです。

3. オーバーロードとの違いとは?

3. オーバーロードとの違いとは?
3. オーバーロードとの違いとは?

オーバーロード(Overload)とは、「同じ名前のメソッドで、引数の数や型(かたち)を変えて、複数のバージョンを定義すること」です。

ただし、Pythonではオーバーロードはサポートされていません。Pythonでは、関数名が同じであっても、あとから定義されたものが上書きされます。


def greet():
    print("こんにちは")

def greet(name):
    print(f"こんにちは、{name}さん")

greet()

TypeError: greet() missing 1 required positional argument: 'name'

このように、最初に書いたgreet()は上書きされて消えてしまいます。

4. オーバーロードを実現するには?

4. オーバーロードを実現するには?
4. オーバーロードを実現するには?

Pythonでオーバーロード風の動きをさせたい場合は、*argsNoneなどを使って、引数の数によって処理を分ける方法があります。


def greet(name=None):
    if name:
        print(f"こんにちは、{name}さん")
    else:
        print("こんにちは")

greet()
greet("さくら")

こんにちは
こんにちは、さくらさん

このようにnameに値があるかどうかで、あいさつの文を変えています。

-

5. ポリモーフィズムのメリットとは?

5. ポリモーフィズムのメリットとは?
5. ポリモーフィズムのメリットとは?

ポリモーフィズムには、以下のようなメリットがあります:

  • 共通のインターフェースで扱えるため、コードがシンプルになる
  • 拡張しやすく、新しいクラスを追加しても既存コードを変更しなくてよい
  • 現実世界の「多様性」に近い考え方ができる

6. ポリモーフィズムを身近な例でたとえてみよう

6. ポリモーフィズムを身近な例でたとえてみよう
6. ポリモーフィズムを身近な例でたとえてみよう

ポリモーフィズムは、たとえば「リモコンのボタンを押す」と考えてみましょう。

テレビ、エアコン、照明、それぞれの「電源」ボタンは同じ見た目ですが、押したときの動きはそれぞれちがいます。テレビは画面がつき、エアコンは風が出て、照明は光ります。

つまり「同じ操作(メソッド名)で、ちがう動き(中身)」になるのがポリモーフィズムです。

7. 抽象クラスとポリモーフィズムの関係

7. 抽象クラスとポリモーフィズムの関係
7. 抽象クラスとポリモーフィズムの関係

ポリモーフィズムを活かすために、「抽象クラス(ちゅうしょうクラス)」を使うこともあります。抽象クラスとは、「中身が決まっていないけど、こういうメソッドはあるよ」という約束だけ決めるクラスです。

Pythonではabcモジュールを使って抽象クラスを定義できます。


from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass

このように書くと、speakを実装しないと使えないクラスになります。これは「設計ミス」を防ぐのに役立ちます。

8. まとめると?

8. まとめると?
8. まとめると?

ポリモーフィズムはオブジェクト指向プログラミングの中でもとても重要な概念です。「同じメソッド名で中身を変える」しくみによって、柔軟で拡張性のあるコードが書けるようになります。

Pythonではオーバーライドによってポリモーフィズムを実現し、オーバーロードは明示的にはサポートされていませんが、工夫すれば似たような動きも可能です。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.7
Java&Spring記事人気No7
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-