新聞中心
__str__和__repr__有什么異同?
字符串的表示形式
我們都知道,Python的內(nèi)置函數(shù) repr()? 能夠把對(duì)象用字符串的形式表達(dá)出來(lái),方便我們辨認(rèn)。這就是“字符串表示形式”。repr()? 就是通過(guò) __repr__? 這個(gè)特殊方法來(lái)得到一個(gè)對(duì)象的字符串表示形式的。如果沒(méi)有實(shí)現(xiàn) __repr__ ,當(dāng)我們?cè)诳刂婆_(tái)里打印一個(gè)向量的實(shí)例時(shí),得到的字符串可能會(huì)是

十載的綏德網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整綏德建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“綏德網(wǎng)站設(shè)計(jì)”,“綏德網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
>>> class Example: pass
>>> print(str(Example()))
<__main__.Example object at 0x10a514f98>
>>> print(repr(Example()))
<__main__.Example object at 0x1088eb438>
>>>
>>> str(Example)
""
>>> repr(Example())
'<__main__.Example object at 0x1088eb438>'
**__str__**?vs.**__repr__**
接下來(lái)我們看一看**__str__**和**__repr__**?有哪些異同。根據(jù)Python官方文檔定義:
- __str__?:通過(guò) str(object) 以及內(nèi)置函數(shù) format() 和 print() 調(diào)用以生成一個(gè)對(duì)象的“非正式”或格式良好的字符串表示。返回值必須是字符串對(duì)象。
- __repr__?:是由 repr() 內(nèi)置函數(shù)調(diào)用,用來(lái)輸出一個(gè)對(duì)象的“官方”字符串表示。返回值必須是字符串對(duì)象,此方法通常被用于調(diào)試。內(nèi)置類(lèi)型 object 所定義的默認(rèn)實(shí)現(xiàn)會(huì)調(diào)用 object.__repr__()。
什么正式與非正式格式,你已經(jīng)搞懵了是嗎?沒(méi)事,我們接著看:
1. 兩者都能輸出對(duì)象
>>> x = 4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y = 'pythonic'
>>> repr(y)
"'pythonic'"
>>> str(y)
'pythonic'
>>> z = '4'
>>> repr(z)
"'4'"
>>> str(z) # 注意,此處的輸出結(jié)果形式跟str(x)一樣,但x和z的類(lèi)型并不一樣
'4'
>>> str(x) == str(z)
True
>>> repr(x) == repr(z)
False
>>> str(4) == str("4")
True
>>> repr(4) == repr("4")
False
當(dāng) x=4,當(dāng) x 為整數(shù)類(lèi)型時(shí),調(diào)用 str()? 和 repr() 的返回結(jié)果是一樣,
而當(dāng)y為字符串類(lèi)型時(shí),repr(y)? 的結(jié)果就是“正式”的字符串表示,而 str(y)? 的結(jié)果則是“非正式”的。str() 能夠讓我們最快速了解到對(duì)象的內(nèi)容,可讀性較高。
2 .__str__?是可讀的,__repr__的目標(biāo)是明確的
>>> 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() 更能顯示出對(duì)象的類(lèi)型、值等信息,對(duì)象描述清晰的。
在 str()? 函數(shù)被使用,或是在用 print 函數(shù)打印一個(gè)對(duì)象的時(shí)候才被調(diào)用的,并且它返回的字符串對(duì)終端用戶(hù)更友好。
3. 重寫(xiě)__repr__?,那也會(huì)使用__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))
輸出結(jié)果:
Name:Alice
Name:Alice
姓名:Alice
總結(jié)
共同點(diǎn): 都是用來(lái)輸出一個(gè)對(duì)象
區(qū)別:
- __str__? 的目標(biāo)是可讀的,__str__() 并不預(yù)期返回一個(gè)有效的 Python 表達(dá)式,但可以使用更方便或更準(zhǔn)確的描述信息。
- __repr__ 的目標(biāo)是明確的,所返回的字符串應(yīng)該準(zhǔn)確、無(wú)歧義,并且盡可能表達(dá)出如何用代碼創(chuàng)建出這個(gè)被打印的對(duì)象。
- 容器的__str__? 方法的使用包含對(duì)象的 __repr__?
本文名稱(chēng):一文徹底搞懂Python中__str__和__repr__
鏈接地址:http://www.dlmjj.cn/article/djocgid.html


咨詢(xún)
建站咨詢(xún)
