类实例 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() 转换为字符串时(例如,作为显示列表的元素),反斜杠将被转义并因此出现两次。