1. ホーム
  2. python

Python object.__repr__(self) は式であるべき?

2023-08-25 10:34:54

質問

の組み込みオブジェクトのメソッドを見ていたのですが、このメソッドでは Python ドキュメント のドキュメントを見ていて、私は object.__repr__(self) . 以下はその内容です。

組み込み関数 repr() によって呼び出されます。 と文字列変換(逆引用符)によって呼び出されます。 引用符で囲む)によって呼び出されます。 文字列表現を計算するために呼ばれます。可能であれば 可能であれば、これは以下のように見えるはずです。 有効なPythonの表現であり を持つオブジェクトを再作成するために使用できる有効なPython式のように見えるべきです。 同じ値を持つオブジェクトを(適切な を再現できるようなものでなければなりません。) これが不可能な場合 という形式の文字列が返されます。 説明...>という形式の文字列が返される必要がある。 戻り値は,文字列 オブジェクトでなければならない。もしクラスが repr () が定義されているが str () であれば repr () は は「非公式な」文字列表現である場合にも使われます。 のインスタンスの文字列表現が必要な場合にも使われます。 も使われます。

これは通常、デバッグのために使われます。 であることが重要です。 表現が情報豊富で 曖昧でないことが重要です。

私が一番興味深かったのは

<ブロッククオート

可能であれば、これは同じ値を持つオブジェクトを再作成するために使用できる有効なPython式のように見えるはずです。

...ですが、これが何を意味するのか正確にはわかりません。以下のように書かれています。 を見る のように見えるとありますが、これは単に使用できる式の例であるべきという意味でしょうか、それともオブジェクトを再作成するために実行 (eval など) できる実際の式であるべきでしょうか?それとも...純粋な情報目的のために、実際に使用された式のリハーサルであるべきなのでしょうか?

一般的に、私はここに置くべき正確なものとして少し混乱しています。

どのように解決するのですか?

>>> from datetime import date
>>>
>>> repr(date.today())        # calls date.today().__repr__()
'datetime.date(2009, 1, 16)'
>>> eval(_)                   # _ is the output of the last command
datetime.date(2009, 1, 16)

出力はpythonインタプリタが解析可能な文字列で、結果はイコールオブジェクトになります。

もしそれが不可能なら、それは文字列を返すべきで、その形式は <...some useful description...> .