问题
改变对象实例的打印或显示输出,让它们更具可读性。
解决方案
要改变一个实例的字符串显示,可重新定义它的__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__()
来代替输出。
网友评论