Python中函數 __str__ 和 __repr__ 的區別

簡而言之:

  • __str__ 的目標在於可讀性(對用戶更友好)
  • __repr__ 的目標在於無歧義(更有助於調試)

舉個栗子(Difference between str and repr?):

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
'2020-03-28 11:06:49.580643'
>>> repr(today)
'datetime.datetime(2020, 3, 28, 11, 6, 49, 580643)'

注:str()和repr()函數分別調用的是 __str__ 和 __repr__

從上面不難看出, __str__ 強調對於用戶的可讀性,而 __repr__則傾向於描述對象本身。

另外在《流暢的Python》一書中提到如果這兩個方法只實現一個的話,那麼 __repr__ 會是更好的選擇。因爲如果一個對象沒有 __str__ 函數,解釋器會用 __repr__代替,反之則不成立。參考代碼(Difference between str and repr?):

class Sic(object):
    def __repr__(object): return 'foo'

print str(Sic())
print repr(Sic())

class Sic(object):
     def __str__(object): return 'foo'

print str(Sic())
print repr(Sic())

輸出:

foo
foo
foo
<__main__.Sic object at 0x101ea4810>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章