首頁  >  文章  >  後端開發  >  __str__和__repr__有什麼差別

__str__和__repr__有什麼差別

anonymity
anonymity原創
2019-05-24 15:41:575315瀏覽

__str__和repr__的差異是:__str__會傳回一個友善的顯示,而__repr__需要重構方法,然後在底層進行__repr__的顯示。 __str__會覆蓋__repr__以得到更友善的使用者顯示。

__str__和__repr__有什麼差別

__repr__和__str__的差異(解釋)

__repr__和__str__這兩個方法都是用來顯示的,__str__是面向使用者的,而__repr__則是面向程式設計師。

列印操作會先嘗試__str__和str內建函數(print運行的內部等價形式),它通常應該傳回一個友善的顯示。

__repr__用於所有其他的環境:用於交互模式下提示回應以及repr函數,如果沒有使用__str__,會使用print和str。它通常應該返回一個編碼字串,可以用來重新建立對象,或給開發者詳細的顯示。

當我們想所有環境下都統一顯示的話,可以重構__repr__方法;當我們想在不同環境下支援不同的顯示,例如終端用戶顯示使用__str__,而程式設計師在開發期間則使用底層的__repr__來顯示,實際上__str__只是覆蓋了__repr__以獲得更友善的使用者顯示。

class Test(object):
    def __init__(self, value='hello, world!'):
        self.data = value
>>> t = Test()
>>> t
<__main__.Test at 0x7fa91c307190>
>>> print t
<__main__.Test object at 0x7fa91c307190>
# 看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
# 下面我们重构下该类的__repr__以及__str__,看看它们俩有啥区别
# 重构__repr__
class TestRepr(Test):
    def __repr__(self):
        return &#39;TestRepr(%s)&#39; % self.data
>>> tr = TestRepr()
>>> tr               直接终端显示,不print就是面向程序员
TestRepr(hello, world!)
>>> print tr         print是面向程序员
TestRepr(hello, world!)
# 重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们__repr__方法中定义的格式进行显示了
# 重构__str__
calss TestStr(Test):
    def __str__(self):
        return &#39;[Value: %s]&#39; % self.data
>>> ts = TestStr()
>>> ts
<__main__.TestStr at 0x7fa91c314e50>
>>> print ts
[Value: hello, world!]
# 你会发现,直接输出对象ts时并没有按我们__str__方法中定义的格式进行输出,而用print输出的信息却改变了

以上是__str__和__repr__有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn