Python中__repr__和__str__區(qū)別詳解
看下面的例子就明白了
class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Test() >>> t <__main__.Test at 0x7fa91c307190> >>> print t <__main__.Test object at 0x7fa91c307190>
看到了么?上面打印類對(duì)象并不是很友好,顯示的是對(duì)象的內(nèi)存地址
下面我們重構(gòu)下該類的__ repr__以及str,看看它們倆有啥區(qū)別
# 重構(gòu)__repr__ class TestRepr(Test): def __repr__(self): return 'TestRepr(%s)' % self.data >>> tr = TestRepr() >>> tr 直接終端顯示,不print就是面向程序員 TestRepr(hello, world!) >>> print tr print是面向程序員 TestRepr(hello, world!)
重構(gòu)__ repr__方法后,不管直接輸出對(duì)象還是通過print打印的信息都按我們r(jià)epr方法中定義的格式進(jìn)行顯示了
# 重構(gòu)__str__ calss TestStr(Test): def __str__(self): return '[Value: %s]' % self.data >>> ts = TestStr() >>> ts <__main__.TestStr at 0x7fa91c314e50> >>> print ts [Value: hello, world!]
你會(huì)發(fā)現(xiàn),直接輸出對(duì)象ts時(shí)并沒有按我們str方法中定義的格式進(jìn)行輸出,而用print輸出的信息卻改變了
repr和str這兩個(gè)方法都是用于顯示的,str是面向用戶的,而repr面向程序員。
打印操作會(huì)首先嘗試str和str內(nèi)置函數(shù)(print運(yùn)行的內(nèi)部等價(jià)形式),它通常應(yīng)該返回一個(gè)友好的顯示。
__ repr__用于所有其他的環(huán)境中:用于交互模式下提示回應(yīng)以及repr函數(shù),如果沒有使用str,會(huì)使用print和str。它通常應(yīng)該返回一個(gè)編碼字符串,可以用來重新創(chuàng)建對(duì)象,或者給開發(fā)者詳細(xì)的顯示。
當(dāng)我們想所有環(huán)境下都統(tǒng)一顯示的話,可以重構(gòu)repr方法;當(dāng)我們想在不同環(huán)境下支持不同的顯示,例如終端用戶顯示使用str,而程序員在開發(fā)期間則使用底層的repr來顯示,實(shí)際上str只是覆蓋了repr以得到更友好的用戶顯示。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django中Migrate和Makemigrations實(shí)操詳解
這篇文章主要為大家介紹了Django中Migrate和Makemigrations實(shí)操詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Python源碼學(xué)習(xí)之PyType_Type和PyBaseObject_Type詳解
今天給大家?guī)淼氖顷P(guān)于Python源碼的相關(guān)知識(shí)學(xué)習(xí),文章圍繞著PyType_Type和PyBaseObject_Type展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06PyQt5 實(shí)現(xiàn)給窗口設(shè)置背景圖片的方法
今天小編就為大家分享一篇PyQt5 實(shí)現(xiàn)給窗口設(shè)置背景圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python urllib.request對(duì)象案例解析
這篇文章主要介紹了Python urllib.request對(duì)象案例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化
在圖像處理中,直方圖是非常重要,也是非常有用的一個(gè)處理要素。這篇文章主要介紹了python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05pycharm終端無法激活conda環(huán)境的解決辦法
如果您在PyCharm終端中無法激活conda環(huán)境,可能是由于PyCharm沒有正確配置conda解釋器,這篇文章主要給大家介紹了關(guān)于pycharm終端無法激活conda環(huán)境的解決辦法,需要的朋友可以參考下2023-09-09Python OpenCV實(shí)現(xiàn)圖像模板匹配詳解
提供一個(gè)模板圖像,一個(gè)目標(biāo)圖像,且滿足模板圖像是目標(biāo)圖像的一部分,從目標(biāo)圖像中尋找特定的模板圖像的過程,即為模板匹配。本文將詳細(xì)講解如何利用Python OpenCV實(shí)現(xiàn)圖像模板匹配,需要的可以參考一下2022-04-04Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)從任意長度的可迭代對(duì)象中分解元素操作示例
這篇文章主要介紹了Python 數(shù)據(jù)結(jié)構(gòu)與算法 從任意長度的可迭代象中分解元素操作,結(jié)合實(shí)例形式分析了Python使用*表達(dá)式針對(duì)可迭代對(duì)象的分解操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-02-02