"Difference between str and repr in Python"(stackoverflow.com/questions/1… 是 Stack Overflow 上的一個問題。python
在此,筆者將從代碼 & 語法兩個層次,進行分析。程序員
class Test(object): pass
test = Test()
str(test) # <__main__.Test object at 0x108ff4f28>
repr(test) # <__main__.Test object at 0x108ff4f28>
class Repr(object):
def __repr__(self):
return '__repr__'
r = Repr()
str(r) # '__repr__'
repr(r) # '__repr__'
class Str(object):
def __str__(self):
return '__str__'
s = Str()
str(s) # '__str__'
repr(s) # '<__main__.Str object at 0x109170898>'
複製代碼
由以上代碼,能夠看出來:若是你覆蓋了 __repr__ 方法,__str__ 也適用,但反之亦然。bash
repr(object)
返回包含一個對象的可打印表示形式的字符串。
類能夠經過定義 __repr__() 方法來控制此函數爲它的實例所返回的內容。
object.__repr__(self)
由 repr() 內置函數調用以輸出一個對象的'官方'字符串表示。
此方法一般被用於調試。面向程序員
str(object='')
返回 object 的字符串版本。即返回 object.__str__()。
若是 object 沒有 __str__ 方法,則返回 repr(object)。
object.__str__(self)
經過 str(object) 以及內置函數 format() 和 print() 的調用,生成一個對象的字符串表示。
返回值必須是字符串對象
內置類型 object 所定義的默認實現會調用 object.__repr__()。
複製代碼
由以上可知:函數
若是你只想實現兩個特殊方法中的一個,__repr__ 是更好的選擇,由於若是一個對象沒有 __str__ 函數,而 Python 又須要調用它的時候,解釋器會用 __repr__ 做爲代替。ui