TL;DR
__str__()
と__repr__()
は、どちらもオブジェクトの文字列表現を返す特殊メソッドである。
__str__()
と__repr__()
のポイント
__str__()
は、オブジェクトを文字列で表現する特殊メソッド__str__()
は、print()に渡された場合に呼ばれる- str()はユーザーが分かりやすい形で表示される
- repr()は引数にシングルクォーテーションマークを付けて返す
__repr__()
は、組み込み関数の repr()が呼び出される。print()に渡された場合は、__str__()
が呼ばれる。
その前に str()と repr() の違いについて説明しておく。
str()と repr() の違い
str()は、object の 文字列、つまりユーザーが分かりやすい形で表示され、repr()はオブジェクトの印字可能な表現を含む文字列を返す。
str('hoge')
# 'hoge'
分かりやすくいうと、repr()は、引数にシングルクォーテーションマークを付けて返す。
repr('hoge')
# ''hoge''
__str__()
と__repr__()
の違い
__str__()
について公式を翻訳した。
str(object)や,組み込み関数 format(),print()によって呼び出され,オブジェクトの "非公式 "またはきれいに印刷できる文字列表現を計算します.戻り値は、文字列オブジェクトでなければなりません。
このメソッドは object.
__repr__()
とは異なり、__str__()
が有効な Python 式を返すことは期待されていません: より便利で簡潔な表現が使用できます。
組み込み型の object で定義されたデフォルトの実装では、
object.__repr__()
を呼び出します。
__str__()
は、オブジェクトを文字列で表現する特殊メソッドである。str(object)や、組み込み関数の print()に渡された場合に呼ばれる。
次に、__repr__()
について公式を翻訳した。
オブジェクトの文字列表現を計算するために repr() 組み込み関数によって呼び出されます。これは同じ値のオブジェクトを再生成するのに使用できる有効な Python の式のように見えるべきです。それができない場合は、<...some useful description...>という形式の文字列が返されます。
戻り値は、文字列オブジェクトでなければなりません。もし、あるクラスが
__repr__()
を定義していて、__str__()
を定義していない場合、そのクラスのインスタンスの "非公式 "な文字列表現が必要な場合には、__repr__()
も使用されます。
参考:3. Data model — Python 3.3.7 documentation
オブジェクト名のみを入力するとobject.__repr__()
が呼ばれるので、以下のような結果となる。__repr__()
は、組み込み関数の repr()が呼び出される。
a = 'hoge'
a
# 'hoge'
しかし、組み込み関数である print() を経由すると__str__()
が呼ばれるので、上の結果と異なる。
a = 'hoge'
print(a)
# hoge
オブジェクトだとobject.__repr__()
が呼ばれる。
class A:
def __init__(self, x):
self.x = x
def __str__(self):
return 'str'
def __repr__(self):
return 'repr'
a = A(1)
a
# repr
print() を経由すると__str__()
が呼ばれる。
class A:
def __init__(self, x):
self.x = x
def __str__(self):
return 'str'
def __repr__(self):
return 'repr'
a = A(1)
print(a)
# str