ホームページ  >  記事  >  バックエンド開発  >  Python の __str__ と __repr__ を 1 つの記事で徹底的に理解する

Python の __str__ と __repr__ を 1 つの記事で徹底的に理解する

PHPz
PHPz転載
2023-04-10 14:51:102112ブラウズ

__str__ と __repr__類似点と相違点は何ですか?

文字列表現

Python の組み込み関数 repr() がオブジェクトを文字列の形式に変換できることは誰もが知っています。それを簡単に識別できるということです。これが「文字列表現」です。 repr() は、特別なメソッド __repr__ を通じてオブジェクトの文字列表現を取得します。 __repr__ が実装されていない場合、ベクトル インスタンスをコンソールに出力すると、結果の文字列は になる可能性があります。

>>> class Example: pass

>>> print(str(Example()))
<__main__.Example object at 0x10a514f98>
>>> print(repr(Example()))
<__main__.Example object at 0x1088eb438>
>>> 
>>> str(Example)
"<class '__main__.Example'>"
>>> repr(Example())
'<__main__.Example object at 0x1088eb438>'

**__str__** vs.**__repr__**

次に、**__str__** と **__repr__** の類似点と相違点を見てみましょう。公式 Python ドキュメントによると:

  • __str__: str(object) と組み込み関数 format() および print() によって呼び出され、「非公式」または適切にフォーマットされた文字列表現を生成します。オブジェクトの 。戻り値は文字列オブジェクトである必要があります。
  • __repr__: これは repr() 組み込み関数によって呼び出され、オブジェクトの「公式」文字列表現を出力するために使用されます。戻り値は文字列オブジェクトでなければなりません。このメソッドは通常、デバッグに使用されます。組み込み型オブジェクトに対して定義されたデフォルトの実装は、object.__repr__() を呼び出します。

公式形式と非公式形式について混乱していますよね?問題はありません。引き続き見てみましょう:

1. どちらもオブジェクトを出力できます

>>> x = 4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y = 'pythonic'
>>> repr(y)
"'pythonic'"
>>> str(y)
'pythonic'

>>> z = '4'
>>> repr(z)
"'4'"
>>> str(z)# 注意,此处的输出结果形式跟str(x)一样,但x和z的类型并不一样
'4'
>>> str(x) == str(z)
True
>>> repr(x) == repr(z)
False
>>> str(4) == str("4")
True
>>> repr(4) == repr("4")
False

x=4 の場合、x が整数型の場合、str() と repr の呼び出しの戻り() 結果は同じです。

y が文字列型の場合、 repr(y) の結果は「形式的な」文字列表現ですが、 str(y) の結果は「非形式的」です。 「。」 str() を使用すると、オブジェクトの内容を最も早く理解でき、読みやすくなります。

2 .__str__ は読みやすく、__repr__ の目的は明確です。

>>> import datetime
>>> d = datetime.datetime.now()
>>> str(d)
'2020-04-04 20:47:46.525245'
>>> repr(d)
'datetime.datetime(2020, 4, 4, 20, 47, 46, 525245)'
>>>

repr() はオブジェクトの型、値、その他の情報をより適切に表示できることがわかります。オブジェクトの説明が明確です。

これは、str() 関数が使用されるとき、または print 関数を使用してオブジェクトが印刷されるときに呼び出され、返される文字列はエンド ユーザーにとってよりわかりやすいものになります。

3. __str__

class Student():

def __init__(self, name):
self.name = name

def __str__(self):
return "Name:" + self.name

def __repr__(self):
return "姓名:" + self.name


class_one = Student("Alice")
print(class_one)
print(str(class_one))
print(repr(class_one))

も使用する __repr__ を書き換えます。出力結果:

Name:Alice
Name:Alice
姓名:Alice

Summary

共通点: これらはすべて出力に使用されます。オブジェクト

違い:

  1. __str__ ターゲットは読み取り可能ですが、__str__() は有効な Python 式を返すことは期待されていませんが、より便利に使用したり、より正確な説明情報を使用したりできます。
  2. __repr__ の目標は明確であり、返される文字列は正確で、曖昧さがなく、コードを使用して印刷オブジェクトを作成する方法を可能な限り表現する必要があります。
  3. コンテナの __str__ メソッドの使用には、オブジェクトの __repr__
が含まれます

以上がPython の __str__ と __repr__ を 1 つの記事で徹底的に理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。