Pythonにおけるオブジェクト

特殊メソッド(str, repr など)

Pythonには、__init__メソッドみたいに、名前の最初と最後にアンダースコア(_)が二つ付いている特別なメソッドがたくさんあるんだ。これらは「特殊メソッド」とか「マジックメソッド」って呼ばれてるよ。

今回は、その中でも特に便利な「__str__」と「__repr__」という二つのメソッドを紹介するね。

これらのメソッドは、みんなが作ったインスタンスを、分かりやすい文字として表示させたいときに使うんだ。

__str__メソッド

__str__メソッド」は、インスタンスを「人間が読んだときに分かりやすい形」で表示したいときに使うよ。

例えば、print()関数でインスタンスを表示するときに、この__str__メソッドが自動で呼ばれるんだ。


class Item:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    # __str__メソッドを定義するよ
    def __str__(self):
        return f"アイテム名: {self.name}, 値段: {self.price}円"

sword = Item("鉄の剣", 1000)
print(sword) # 出力: アイテム名: 鉄の剣, 値段: 1000円

__str__メソッドがないと、print(sword)と書いたときに、ただの文字の羅列(例: <__main__.Item object at 0x...>)が表示されてしまうんだ。

__repr__メソッド

__repr__メソッド」は、インスタンスを「Pythonのコードとして表現できる形」で表示したいときに使うよ。これは、開発者がプログラムをデバッグ(間違い探し)するときに役立つことが多いんだ。


class Item:
    def __init__(self, name, price):
        self.name = name
        self.price = price

    # __repr__メソッドを定義するよ
    def __repr__(self):
        return f"Item('{self.name}', {self.price})"

sword = Item("鉄の剣", 1000)
print(sword) # __str__がなければ__repr__が使われるよ。または、Pythonの対話モードで変数を入力したときにも使われる。

もし__str__メソッドと__repr__メソッドの両方が定義されていたら、print()関数は__str__を優先して使うんだ。でも、Pythonの対話モードで変数名だけ入力したり、リストや辞書の中にインスタンスを入れたりしたときには、__repr__が使われることが多いよ。

これらの特殊メソッドを使うと、みんなの作ったプログラムがもっと分かりやすくなって、デバッグも楽しくなるはずだよ!