Python Language类实例的字符串表示:__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()的字符串通过str()转换为字符串时,反斜杠显示为原样(它们出现一次)。当它们通过repr()转换为字符串时(例如,作为显示列表的元素),反斜杠将被转义并因此出现两次。

类实例的字符串表示:__str__和__repr__方法 相关例子