Python Languageクラスインスタンスの文字列表現:__str__および__repr__メソッド


備考

両方のメソッドの実装に関する注意

両方の方法が実装されている場合は、それが持っている、やや一般的です__str__人に優しい表現(例えば、「スペースのエース」)を返し、メソッド__repr__返すevalやさしい表現を。

実際、 repr() Pythonドキュメントはこれを正確にメモしています:

多くの型では、この関数はeval()に渡されるときに同じ値を持つオブジェクトを生成する文字列を返そうとします。さもなければ、その表現はオブジェクトの型の名前を含む山括弧で囲まれた文字列です多くの場合、オブジェクトの名前とアドレスを含む追加情報があります。

つまり、 __str__実装して__str__ように「Ace of Spaces」のようなものを返すことができますが、代わりに__repr__実装してCard('Spades', 1)

この文字列は、ある程度「往復」でevalに直接渡すことができます:

object -> string -> object

このようなメソッドの実装例は次のとおりです。

def __repr__(self):
    return "Card(%s, %d)" % (self.suit, self.pips)

ノート

[1]この出力は実装固有のものです。表示される文字列はcpythonのものです。

[2]あなたはすでにこのstr() / repr()の結果を分かっていて、分かっていないかもしれません。バックスラッシュなどの特殊文字を含む文字列がstr()を介して文字列に変換されると、バックスラッシュはそのまま表示されstr()一度表示されます)。それらがrepr()を介して文字列に変換されると(たとえば、表示されるリストの要素として)、バックスラッシュはエスケープされて2回表示されます。

クラスインスタンスの文字列表現:__str__および__repr__メソッド 関連する例