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