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__
が使われることが多いよ。
これらの特殊メソッドを使うと、みんなの作ったプログラムがもっと分かりやすくなって、デバッグも楽しくなるはずだよ!