python中兩個魔術方法 __repr__和__str__
阿新 • • 發佈:2019-01-11
repr() 和 str() 的區別
- str()
1 使用str()函式時, 才呼叫__str_ __
2 使用print()函式時
3 str() 的輸出追求可讀性,輸出格式要便於理解,適合用於輸出內容到使用者終端。 - repr()
1 使用repr()時,才呼叫___repr_ __
2 在互動式控制檯(即:>>)或除錯程式(即Debug執行程式碼時)
3 repr() 的輸出追求明確性,除了物件內容,還需要展示出物件的資料型別資訊,適合開發和除錯階段使用
class A(object):pass
a = A()
>>> a
< __main__.A object at 0x000002E26B4D89E8>
>>> str(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89E8>'
>>> print(a)
<__main__.A object at 0x000002E26B4D89E8>
>>> print(str(a))
<__main__.A object at 0x000002E26B4D89E8>
>> > print(repr(a))
<__main__.A object at 0x000002E26B4D89E8>
上面顯示的內容是由於類的特殊方法(沒有自定義str和repr時), 在print()和直接執行例項a的時候回列印字串。就會出現上面的結果。
class A(object):
def __repr__(self):
return '這是__repr__'
def __str__(self):
return '這是__str__'
>>> a
這是__repr__
>> > repr(a)
'這是__repr__'
>>> str(a)
'這是__str__'
>>> print(a)
這是__str__
class A(object):
def __str__(self):
return '這是__str__'
a = A()
>>> a
<__main__.A object at 0x000002E26B4D89B0>
>>> repr(a)
'<__main__.A object at 0x000002E26B4D89B0>'
>>> str(a)
'這是__str__'
>>> print(a)
這是__str__
class A(object):
def __repr__(self):
return '這是__repr'
>>> a
這是__repr__
>>> repr(a)
'這是__repr__'
>>> str(a)
'這是__repr__'
>>> print(a)
這是__repr__
總結:如果一個物件沒有__str__函式,python又需要呼叫它時,直譯器就會__repr__作為代替,
repr(object)官方文件
repr(object) 返回包含物件的可打印表示形式的字串
1 嘗試生成這樣一個字串,其結果絕大多數情況下(不是所有)可以通過內建函式eval(重新得到該物件,即obj==eval(repr(obj))這個等式是成立的。
2 否則,生成用尖括號包住的字串,包含型別名和額外的資訊(比如地址)
3 類可以通過定義__repr__()方法來控制這個函式返回給它的例項的內容。
str() 返回包含物件的可打印表示形式的字串
1 嘗試生成這樣一個字串,結果不可以通過eval()可重新生成同樣的物件
a = 'hello'
>>a
'hello'
>>print(a)
hello
>>str(a) #字串本身還是字串
'hello'
>>print(str(a))
hello
>>repr(a)
"'hello'"
>>print(repr(a))
'hello'
https://blog.csdn.net/sinat_41104353/article/details/79254149
https://blog.csdn.net/WIinter_FDd/article/details/78063985