Python 通過自定義函式檢視__str__和__repr__的區別
阿新 • • 發佈:2018-12-17
直接給出以下例子,應該好懂
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> # 看到了麼?上面列印類物件並不是很友好,顯示的是物件的記憶體地址 # 下面我們重構下該類的__repr__以及__str__,看看它們倆有啥區別 # 重構__repr__ class TestRepr(Test): def __repr__(self): return 'TestRepr(%s)' % self.data >>> tr = TestRepr() >>> tr TestRepr(hello, world!) >>> print tr TestRepr(hello, world!) # 重構__repr__方法後,不管直接輸出物件還是通過print列印的資訊都按我們__repr__方法中定義的格式進行顯示了 # 重構__str__ calss TestStr(Test): def __str__(self): return '[Value: %s]' % self.data >>> ts = TestStr() >>> ts <__main__.TestStr at 0x7fa91c314e50> >>> print ts [Value: hello, world!] # 你會發現,直接輸出物件ts時並沒有按我們__str__方法中定義的格式進行輸出,而用print輸出的資訊卻改變了
__repr__和__str__這兩個方法都是用於顯示的,__str__是面向使用者的,而__repr__面向程式設計師。
列印操作會首先嚐試__str__和str內建函式(print執行的內部等價形式),它通常應該返回一個友好的顯示。
__repr__用於所有其他的環境中:用於互動模式下提示迴應以及repr函式,如果沒有使用__str__,會使用print和str。它通常應該返回一個編碼字串,可以用來重新建立物件,或者給開發者詳細的顯示。
當我們想所有環境下都統一顯示的話,可以重構__repr__方法;當我們想在不同環境下支援不同的顯示,例如終端使用者顯示使用__str__,而程式設計師在開發期間則使用底層的__repr__來顯示,實際上__str__只是覆蓋了__repr__以得到更友好的使用者顯示。 --------------------- 作者:Tab609 來源:CSDN 原文:https://blog.csdn.net/luckytanggu/article/details/53649156 版權宣告:本文為博主原創文章,轉載請附上博文連結!