類例項 str 和 repr 方法的字串表示

關於實現這兩種方法的說明

當兩種方法都實現時,有一個 __str__ 方法返回一個人性化的表示(例如 Ace of Spaces)和 __repr__ 返回一個 eval 友好的表示,這有點常見。

事實上, repr() 的 Python 文件正好指出:

對於許多型別,此函式嘗試返回一個字串,該字串在傳遞給 eval() 時會產生具有相同值的物件,否則表示形式是一個用尖括號括起來的字串,它包含物件型別的名稱附加資訊通常包括物件的名稱和地址。

這意味著 __str__ 可能被實現為返回如前所示的 Ace of Spaces 之類的內容,__repr__ 可能會被實現為返回 Card('Spades', 1)

這個字串可以通過某種往返直接傳遞迴 eval

object -> string -> object

這種方法的實現示例可能是:

def __repr__(self):
    return "Card(%s, %d)" % (self.suit, self.pips)

筆記

[1]此輸出是特定於實現的。顯示的字串來自 cpython。

[2]你可能已經看到了這個 str() / repr() 劃分的結果而不知道它。當包含特殊字元(如反斜槓)的字串通過 str() 轉換為字串時,反斜槓顯示為原樣(它們出現一次)。當它們通過 repr() 轉換為字串時(例如,作為顯示列表的元素),反斜槓將被轉義並因此出現兩次。