Pythonの__str__と__repr__の違いは何ですか?
__str__
__repr__
あなたが特別な行動を取らない限り、ほとんどのクラスはどちらにも役立つ結果を得られません。
>>> class Sic(object): pass ... >>> print str(Sic()) >>> print repr(Sic()) >>>
ご覧のように -- 違いはなく、クラスとオブジェクトの id を超える情報もありません。 どちらか一方だけをオーバーライドする場合は......。
id
>>> class Sic(object): ... def __repr__(object): return 'foo' ... >>> print str(Sic()) foo >>> print repr(Sic()) foo >>> class Sic(object): ... def __str__(object): return 'foo' ... >>> print str(Sic()) foo >>> print repr(Sic()) >>>
ご覧のように、__repr__ をオーバーライドすると、それは __str__ にも使われますが、その逆はありません。
他にも知っておくべき重要なことがあります: ビルドオンコンテナの __str__ は、含まれるアイテムに対して __str__ ではなく __repr__ を使用します。また、一般的なドキュメントにはこのようなことが書かれていますが、オブジェクトの __repr__ を eval が同等のオブジェクトを構築するために使用できる文字列にしようとする人はほとんどいません(難しすぎるし、関連するモジュールが実際にどのようにインポートされたかわからないので、実際には不可能です)。
eval
アドバイスとしては、__str__ を適度に人間が読めるようにし、__repr__ を可能な限り曖昧さのないものにすることに集中してください。それが、__repr__ の戻り値を __eval__ の入力として受け入れられるようにするという曖昧で達成不可能な目標を妨げることになってもです
__eval__
__repr__: pythonオブジェクトの表現、通常evalはそのオブジェクトに変換します。
str`: そのオブジェクトと思われるものをテキスト形式で表したもの。
例えば、以下のようになります。
>>> s="""w'o"w""" >>> repr(s) '\'w\\\'o"w\'' >>> str(s) 'w\'o"w' >>> eval(str(s))==s Traceback (most recent call last): File "", line 1, in File "", line 1 w'o"w ^ SyntaxError: EOL while scanning single-quoted string >>> eval(repr(s))==s True
from an (An Unofficial) Python Reference Wiki (archive copy) by effbot:
__str__ "*オブジェクトの "非公式な "文字列表現を計算します。これは __repr__ とは異なり、有効な Python 式である必要はありません: より便利で簡潔な表現を代わりに使用することができます。
あなたが特別な行動を取らない限り、ほとんどのクラスはどちらにも役立つ結果を得られません。
ご覧のように -- 違いはなく、クラスとオブジェクトの
id
を超える情報もありません。 どちらか一方だけをオーバーライドする場合は......。ご覧のように、
__repr__
をオーバーライドすると、それは__str__
にも使われますが、その逆はありません。他にも知っておくべき重要なことがあります: ビルドオンコンテナの
__str__
は、含まれるアイテムに対して__str__
ではなく__repr__
を使用します。また、一般的なドキュメントにはこのようなことが書かれていますが、オブジェクトの__repr__
をeval
が同等のオブジェクトを構築するために使用できる文字列にしようとする人はほとんどいません(難しすぎるし、関連するモジュールが実際にどのようにインポートされたかわからないので、実際には不可能です)。アドバイスとしては、
__str__
を適度に人間が読めるようにし、__repr__
を可能な限り曖昧さのないものにすることに集中してください。それが、__repr__
の戻り値を__eval__
の入力として受け入れられるようにするという曖昧で達成不可能な目標を妨げることになってもです__repr__
: pythonオブジェクトの表現、通常evalはそのオブジェクトに変換します。str`: そのオブジェクトと思われるものをテキスト形式で表したもの。
例えば、以下のようになります。
from an (An Unofficial) Python Reference Wiki (archive copy) by effbot:
__str__
"*オブジェクトの "非公式な "文字列表現を計算します。これは__repr__
とは異なり、有効な Python 式である必要はありません: より便利で簡潔な表現を代わりに使用することができます。