__str__ 和 __repr__

From: http://blog.csdn.net/yyt8yyt8/article/details/7030416

Reference: http://zhidao.baidu.com/link?url=Sc4LZLKx1Cax503f9pv0mY2jel9FMpTR0VWt4aNhDQL2XfBkuSw1IdNB_ptK2CAcMMu9sUdZXQpa17zJo54DdFlfzTG9SYaHiRowRwEdTTa

內建函數str()和repr() (representation,表達,表示)或反引號操作符(``)可以方便地以字符串的方式獲取對象的內容、類型、數值屬性等信息。str()函數得到的字符串可讀性好(故被print調用),而repr()函數得到的字符串通常可以用來重新獲得該對象,通常情況下 obj==eval(repr(obj)) 這個等式是成立的。這兩個函數接受一個對象作爲其參數,返回適當的字符串。

事實上repr()和``做一樣的事情,返回一個對象的“官方”字符串表示。其結果絕大多數情況下(不是所有)可以通過求值運算(內建函數eval())重新得到該對象。

str()則不同,它生成一個對象的可讀性好的字符串表示,結果通常無法用eval()求值,但適合print輸出。

如下例:

>>> class D(object):
...     def __str__(self):
...         return "a __str__"
...     def __repr__(self):
...         return "a __repr__"
...
>>> dr = D()
>>> print dr
a __str__
>>> dr
a __repr__
>>> "%s" % dr
'a __str__'
>>> "%r" % dr
'a __repr__'

 

 

爲什麼有了repr()還需要``? 

 Python中,有的操作符和函數是做同樣的事情,原因是某些場合下函數會比操作符更適合使用,比如函數對象可作爲參數傳遞。雙星號(**)乘方運算和pow()內建函數都返回x的y次方.

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