Python repr:对象的“官方身份证”
标题:Python repr:对象的“官方身份证”
在 Python 编程中,每个对象都有其独特的“身份标识”。当我们调试代码、记录日志,或在交互式环境中查看变量时,Python 会自动调用对象的 __repr__ 方法,返回一个“官方”的字符串表示。这个方法虽小,却在开发过程中扮演着至关重要的角色。
__repr__(全称 representation)是 Python 中的一个特殊方法(也称“魔术方法”),用于定义对象的“官方”字符串表示形式。理想情况下,__repr__ 返回的字符串应尽可能清晰、无歧义,并且最好能直接用于重新创建该对象(即满足 eval(repr(obj)) == obj 的原则,虽然这并非强制要求)。

举个例子:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x}, {self.y})"
p = Point(3, 4)
print(repr(p)) # 输出: Point(3, 4)
如果没有自定义 __repr__,Python 默认会返回类似 <__main__.Point object at 0x7f8b8c0d5f10> 的信息,这对调试几乎毫无帮助。而通过实现 __repr__,我们让对象“自我介绍”得更清楚,极大提升了代码的可读性和可维护性。
值得注意的是,__repr__ 与另一个常用方法 __str__ 有所不同。__str__ 面向最终用户,强调可读性;而 __repr__ 面向开发者,强调准确性和调试价值。如果只实现其中一个,Python 在需要字符串表示时会优先使用 __str__,但在 print()、logging 或交互式解释器中未定义 __str__ 时,会自动回退到 __repr__。
因此,为自定义类实现一个清晰、简洁且信息完整的 __repr__ 方法,是 Python 开发中的最佳实践之一。它不仅让调试更高效,也让代码更具专业感——就像给每个对象颁发了一张清晰明了的“官方身份证”。

