_repr_在python中是正式还是非正式

__repr__是Python中用于返回对象官方字符串表示的方法,旨在为开发者提供明确、精确的对象状态描述,理想情况下可还原对象;与面向用户的__str__不同,__repr__用于调试,若未定义__str__则__repr__会被替代使用,最佳实践要求其清晰表达类型与属性并支持eval重建。

__repr__ 在 Python 中是正式的字符串表示形式,用于表示一个对象的“官方”、明确且尽可能精确的字符串描述。

什么是 __repr__?

当开发者或调试工具需要查看一个对象的完整信息时,Python 会调用 __repr__ 方法。它的目标是返回一个能清楚表达该对象状态的字符串,理想情况下,这个字符串可以用来重新创建该对象(例如通过 eval)。

例如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
def __repr__(self):
    return f"Person('{self.name}', {self.age})"

p = Person("Alice", 30) print(repr(p)) # 输出: Person('Alice', 30)

与 __str__ 的区别

__repr__ 是为开发者设计的正式表示,而 __str__ 是为最终用户设计的非正式、更友好的显示方式。
  • __repr__:用于调试和开发,强调准确性和完整性
  • __str__:用于打印或展示给用户,强调可读性

如果没有定义 str,Python 会退而使用 repr 作为替代。

最佳实践

写好 __repr__ 能极大提升调试体验。建议遵循以下原则:
  • 返回的字符串应清晰表达对象类型和关键属性
  • 尽量让返回值可用于重建对象(eval(repr(obj)) == obj)
  • 避免省略重要信息或使用模糊描述

基本上就这些。__repr__ 是正式的,面向程序员;而 __str__ 才是非正式的,面向用户。不复杂但容易忽略细节。