Python3 - 改变对象的字符串显示

问题

改变对象实例的打印或显示输出,让它们更具可读性。

解决方案

要改变一个实例的字符串显示,可重新定义它的__str__()__repr__()方法。例如:

class Pair(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Pair({self.x!r}, {self.y!r})"

    def __str__(self):
        return f"({self.x!s}, {self.y!s})"

__repr__() 方法返回一个实例的代码表示形式,通常用来重新构造这个实例。内置的 repr() 函数返回字符串,与我们使用的交互式解释器显示的值是一样的。
__str__() 方法将实例转换为一个字符串,使用 str()print() 函数会输出这个字符串。比如:

p = Pair(3, 4)

p
Pair(3, 4)   # __repr__() output

print(p)
(3, 4)   # __str__() output

在格式化的时候,可以使用不同的字符串显示形式。其中 “!r” 对应 repr(); “!s” 对应 str(); “!a” 对应 ascii()。 特别地,!r 格式化代码,表示输出时使用 __repr__() 来代替默认的 __str__()。示例:

p = Pair(3, 4)

print(f"p is {p!r}")
p is Pair(3, 4)

print(f"p is {p}")
p is (3, 4)

讨论

自定义 __repr__()__str__() 通常是很好的习惯,因为它能简化调试和实例输出。
如果 __str__()没有被定义,那么就会使用 __repr__() 来代替输出。

你可能感兴趣的:(Python3 - 改变对象的字符串显示)