カテゴリ: Python 更新日: 2026/02/08

Pythonの特殊メソッドを完全ガイド!初心者でもわかる__str__ / __repr__ / __eq__の使い方

Pythonの特殊メソッド(__str__ / __repr__ / __eq__)の活用方法
Pythonの特殊メソッド(__str__ / __repr__ / __eq__)の活用方法

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

生徒

「Pythonのクラスを作ったんですけど、印刷したときに意味不明な文字が出てしまいます。どうしたら読みやすくできますか?」

先生

「それはPythonの特殊メソッドが関係しているよ。特に__str__や__repr__を使うと、とてもわかりやすく出力できるようになるんだ。」

生徒

「特殊メソッドって特別な機能ですか?名前の前後にアンダースコアがあるやつですよね?」

先生

「そのとおり。Pythonでは多くのクラスがこうした特別な名前のメソッドを持っていて、内部で自動的に呼びだされる仕組みになっているんだ。」

生徒

「じゃあ使い方を知れば便利になるってことですね!」

先生

「もちろん。今日は__str__、__repr__、__eq__の三つを中心に、初心者でも応用できる使い方を解説していこう。」

1. Pythonの特殊メソッドとは?

1. Pythonの特殊メソッドとは?
1. Pythonの特殊メソッドとは?

Pythonには、クラスの中で「特定のタイミングになると自動的に呼ばれる」特殊メソッドが数多く用意されています。名前の前後にアンダースコアが付いているのが特徴で、__str__ や __eq__ もその一種です。これらは自分で直接呼び出すというより、printで表示したときや、==で比較したときなど、Pythonの動作に合わせて裏側で実行されます。

初心者の方は「いつ使われているのかわからない」と感じやすいですが、実はすでに日常的に恩恵を受けています。たとえば数値をprintすると自然に文字として表示されますが、これも内部では特殊メソッドが働いています。クラスを自作するときに特殊メソッドを定義すると、Python標準の型と同じように直感的な振る舞いを持たせることができます。


class Sample:
    pass

s = Sample()
print(s)

このように何も定義していないクラスを表示すると、少し分かりづらい結果になります。次の章から紹介する特殊メソッドを使えば、この表示や動作を自分でコントロールできるようになり、クラスの理解もしやすくなっていきます。

2. __str__メソッドで読みやすい表示を作る

2. __str__メソッドで読みやすい表示を作る
2. __str__メソッドで読みやすい表示を作る

最初に紹介するのは__str__メソッドです。これはprint関数でオブジェクトを表示するときに自動で呼びだされ、画面に出すための文字列を作ります。言いかえると「人間が読むための説明文」を作る場所と考えるとわかりやすいです。


class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name}({self.age}歳)"

u = User("太郎", 20)
print(u)

太郎(20歳)

こうしておくと、クラスの状態をひと目で理解できるので、デバッグやログ出力にも役立ちます。

3. __repr__メソッドでプログラマ向けの表示を作る

3. __repr__メソッドでプログラマ向けの表示を作る
3. __repr__メソッドでプログラマ向けの表示を作る

次に紹介する__repr__メソッドは、プログラマのための表示を作ります。これはデバッグや対話型シェルでオブジェクトを確認するときに使われます。できるだけ再現性のある表現を返すのが理想とされています。つまり、その文字列を使えば同じオブジェクトを再作成できる形に近づけることが推奨されています。


class User:
    def __repr__(self):
        return f"User(name='{self.name}', age={self.age})"

__str__が「人のため」、__repr__が「プログラマのため」と覚えると理解しやすくなります。

4. __eq__メソッドでオブジェクト同士の比較を自由に定義する

4. __eq__メソッドでオブジェクト同士の比較を自由に定義する
4. __eq__メソッドでオブジェクト同士の比較を自由に定義する

Pythonでは、==を使って二つの値が同じかどうかを比較します。このとき、クラスの内部で__eq__メソッドが呼びだされます。もし自分で定義しなければ、同じクラスの別オブジェクトは基本的に違うものとして扱われます。しかし__eq__を使えば、「どの部分が一致していれば同じとみなすか」を自由に決めることができます。


class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):
        return self.name == other.name and self.age == other.age

u1 = User("花子", 18)
u2 = User("花子", 18)
print(u1 == u2)

True

これにより、実際の生活で「同じ人物とみなす条件」をプログラム内に反映できるようになります。

5. __str__と__repr__を両方使い分ける理由

5. __str__と__repr__を両方使い分ける理由
5. __str__と__repr__を両方使い分ける理由

ふだんPythonの学習を始めたばかりの人は「どうして二つも必要なのか」と疑問を持つかもしれません。しかし、この二つは役割がまったく異なります。人が読むための簡潔な説明と、開発者が内部状態を確認するための正確な文字列。用途によって切り替えられることで、開発が進むほど便利さを実感します。特に大量のデータを処理するアプリや分析環境では、どちらも欠かせない存在になります。

6. 特殊メソッドを活用したオブジェクト指向デザイン

6. 特殊メソッドを活用したオブジェクト指向デザイン
6. 特殊メソッドを活用したオブジェクト指向デザイン

Pythonの特殊メソッドを使いこなすと、自然な文章のようにクラスを扱うことができます。まるで自分で作った型に標準機能を追加する感覚で、プログラムが読みやすく成長します。また、比較や文字表示を整理しておくことで、後から読み返すときの理解も大幅に向上します。こうした小さな工夫が、オブジェクト指向プログラミングの良さを引き出す大切な要素になります。

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

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
Pythonの定数を定義する方法!慣習とモジュールを活用した書き方
New2
Python
Pythonのカプセル化とは?private変数とプロパティの活用方法をやさしく解説
New3
Python
Pythonの継承とは?親クラス・子クラスの関係とメソッドオーバーライドをやさしく解説
New4
Python
Pythonのインスタンス変数とクラス変数の違い!selfの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
Python
Pythonでエラーメッセージを取得する方法を完全解説!初心者でもわかるExceptionオブジェクト
No.7
Java&Spring記事人気No7
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方