Python中__str__和__repr__的區別

來源:互聯網
上載者:User

Python中__str__和__repr__的區別

Python有一個內建的函數叫repr,它能把一個對象用字串的形式表達出來以便辨認,這就是“字串表示形式”。repr就是通過__repr__這個特殊方法來得到一個對象的字串表示形式。如果沒有實現__repr__,當我們再控制台裡列印一個變數的執行個體時,得到的字串可能會是<__main__.Object at 0x14af07dbe80>,這個表示的是列印的對象,以及對象的記憶體位址

現在讓我們看看__str__和__repr__這兩個方法有什麼區別

首先定義一個類

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
 
    def __str__(self):
        return 'str Vector(%s, %s)' % (self.x, self.y)

然後我們在控制台上列印這個類的對象執行個體

>>> Vector(1, 2)
<__main__.Vector at 0x14af07dbe80>
>>> str(Vector(1, 2))
'str Vector(1, 2)'
>>> print(Vector(1, 2))
str Vector(1, 2)

從上面的例子我們可以看到,當把變數的執行個體輸入到控制台,會列印出對象的類型和對象的地址,當把對象作為參數傳給str或者print方法,則會調用對象的__str__方法

現在,我們刪除原來的__str__方法,加上__repr__方法,再在控制台做一樣的操作,看看會有什麼不同

 class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
   
    def __repr__(self):
        return 'repr Vector(%s, %s)' % (self.x, self.y)

重複之前列印Vector對象操作

>>> Vector(1, 2)
repr Vector(1, 2)
>>> str(Vector(1, 2))
'repr Vector(1, 2)'
>>> print(Vector(1, 2))
repr Vector(1, 2)

我們可以看到,實現我們沒有實現__str__方法,但在調用str()的時候,str()會自動調用__repr__方法,並且在控制台輸入對象執行個體的時候,出來的不再是物件類型和記憶體位址,而是列印我們所希望表達的對象資訊

最後,我們在Vector類中加上__str__和__repr__方法

 class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
 
    def __str__(self):
        return 'str Vector(%s, %s)' % (self.x, self.y)
   
    def __repr__(self):
        return 'repr Vector(%s, %s)' % (self.x, self.y)

重複之前的操作

>>> Vector(1, 2)
repr Vector(1, 2)
>>> str(Vector(1, 2))
'str Vector(1, 2)'
>>> print(Vector(1, 2))
str Vector(1, 2)

可以知道,當把對象作為參數傳入print()時,會自動調用對象的__str__方法,但是當__str__方法不存在時,則會調用__repr__方法。所以,如果你只想實現這兩個特殊方法中的一個,建議還是選擇__repr__方法。

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-02/151027.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.