Pythonでは、__ repr__と__str__の違いは何ですか?


答え 1:

簡潔に説明します。 _str_と_repr_は両方とも、わずかな違いのある文字列表現です。 repr(object technical details)を使用すると、python eval()関数を呼び出してpython式を評価できますが、できません。

>>> repr(4)== str(4)
本当
>>> repr( 'simple hain ...')== str( 'simple hain ...')
偽

次に、この動作を理解するために、出力を確認するために個人を行います

>>> s = 'simple hain ...'
>>> repr(s)
「 'simple hain ...'」
>>> str(s)
「シンプルなヘイン...」
>>> str(4)
「4」
>>> repr(4)
「4」

_repr_および_str_を理解するためのPython eval関数の使用

>>> eval(repr( 'simple hain ...'))
「シンプルなヘイン...」
>>> eval(str( 'simple hain ...'))
トレースバック(最後の最後の呼び出し):
  ファイル「」、1行目、
  ファイル「」、1行目、
NameError:名前 'simple hain ...'は定義されていません

次に、この機能を使用する場所。 Pythonでは、_repr_を使用してオブジェクト情報を提供し、_str_を使用して印刷または表示します。

  • 実装するすべてのクラスに__repr__を実装して、オブジェクトに関する技術的な詳細を提供してください。読みやすさがより重要だと思うクラスには__str__を実装してください

私はネットでこの例を見つけました

>>>日時インポート日時から
>>> now = datetime.now()
>>> repr(now)
'datetime.datetime(2013、2、5、4、43、11、673075)'
>>> str(now)
'2013-02-05 04:43:11.673075'

これを理解してください。


答え 2:

__repr__の場合、「可能であれば、これは同じ値でオブジェクトを再作成するために使用できる有効なPython式のように見えるはずです(適切な環境が与えられます)。これが不可能な場合、<..いくつかの便利な説明...>が返されます。」

したがって、具体的には、文字列「xyzzy」の__str__は次の文字列になります。xyzzy

一方、文字列の__repr__は文字列になります: 'xyzzy'


答え 3:

__repr__の場合、「可能であれば、これは同じ値でオブジェクトを再作成するために使用できる有効なPython式のように見えるはずです(適切な環境が与えられます)。これが不可能な場合、<..いくつかの便利な説明...>が返されます。」

したがって、具体的には、文字列「xyzzy」の__str__は次の文字列になります。xyzzy

一方、文字列の__repr__は文字列になります: 'xyzzy'