Pythonの__str__
と__repr__
は、ともにクラスで定義できる特殊なメソッドです。これらのメソッドは、オブジェクトを文字列形式に変換するために使用されますが、それぞれ異なる目的と使用場面があります。
__str__メソッド
__str__
メソッドは、オブジェクトの「ユーザーフレンドリー」な文字列表現を生成します。これは、エンドユーザーに表示するためのもので、人間にとって理解しやすい形式であることが期待されます。
class Sample:
def __str__(self):
# 処理
s = Sample()
str(s)
上記のコードでは、str(s)
がSample
クラスの__str__
メソッドを呼び出します。
__repr__メソッド
一方、__repr__
メソッドは、「開発者フレンドリー」な文字列表現を生成します。これは、Pythonのrepr()
組み込み関数によって呼び出され、可能な限りオブジェクトをそのまま再現できる(つまり、eval()
で評価すると元のオブジェクトに戻る)文字列表現を返すことが期待されます。
class Sample:
def __repr__(self):
# 処理
s = Sample()
repr(s)
上記のコードでは、repr(s)
がSample
クラスの__repr__
メソッドを呼び出します。
__str__と__repr__の使い分け
__str__
と__repr__
の主な違いは、その目的と使用場面にあります。__str__
は、人間が読みやすい形式でオブジェクトを表現するためのもので、主にエンドユーザー向けの出力に使用されます。一方、__repr__
は、Pythonがオブジェクトを復元できる形式でオブジェクトを表現するためのもので、主にデバッグや開発者向けの出力に使用されます。
以下に、これらのメソッドの使用例を示します。
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def __str__(self):
return f'名前は{self._name} 年齢は{self._age}'
def __repr__(self):
return f'Person(\"{self._name}\", {self._age})'
p = Person('Alice', 10)
print(str(p)) # 名前はAlice 年齢は10
print(repr(p)) # Person("Alice", 10)
p2 = eval(repr(p))
print(str(p2)) # 名前はAlice 年齢は10
この例では、__str__
メソッドは人間が理解しやすい形式でPerson
オブジェクトを表現し、__repr__
メソッドはPythonがPerson
オブジェクトを復元できる形式でオブジェクトを表現しています。
以上がPythonの__str__
と__repr__
メソッドの基本的な違いと使い分けについての説明です。これらの理解は、Pythonでクラスを定義し、そのインスタンスを適切に表現するために重要です。