__str__是在str()函數被使用,或是在print函數打印一個對象的時候才被調用的,並且它返回的字符串對終端用戶更友好。
如果只想實現這兩個特殊方法中的一個,__repr__是更好的選擇,因為如果一個對象沒有__str__函數,而Python又需要調用它的時候,解釋器會用__repr__作為替代。
__repr__和__str__這兩個方法都是用於顯示的,__str__是面向用戶的,而__repr__面向程序員。
打印操作會首先嘗試__str__和str內置函數(print運行的內部等價形式),它通常應該返回一個友好的顯示。
__repr__用於所有其他的環境中:用於交互模式下提示回應以及repr函數,如果沒有使用__str__,會使用print和str。它通常應該返回一個編碼字符串,可以用來重新創建對象,或者給開發者詳細的顯示。
當我們想所有環境下都統一顯示的話,可以重構__repr__方法;當我們想在不同環境下支持不同的顯示,例如終端用戶顯示使用__str__,而程序員在開發期間則使用底層的__repr__來顯示,實際上__str__只是覆蓋了__repr__以得到更友好的用戶顯示。
