標籤:class 等價 直接 一個 value for highlight net agg
如下:
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49)Type "help", "copyright", "credits" or "license" for>>> class Test(object): ... def __init__(self, value=‘hello, world!‘): ... self.data = value ... >>> t=Test() >>> t <__main__.Test object at 0x0000029579FDF668> >>> print(t) <__main__.Test object at 0x0000029579FDF668> # 看到了嗎?上面列印類對象並不是很友好,顯示的是對象的記憶體位址# 下面我們重構下該類的__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__ >>> class TestStr(Test): ... def __str__(self): ... return "[Value:%s]" % self.data ... >>> ts=TestStr() >>> ts <__main__.TestStr object at 0x0000029579FDF898> >>> 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__以得到更友好的使用者顯示。
原文:http://blog.csdn.net/luckytanggu/article/details/53649156
Python中__repr__和__str__區別