__repr__
和__str__
都是Python中的特殊方法,用于控制对象的字符串表示。它们的主要区别在于它们的用途和预期的输出。
-
__str__
:这个方法应该返回一个用户友好的字符串,用于描述对象。它是为最终用户设计的,因此输出应该是易于理解的。当使用print()
函数或str()
函数转换对象时,Python会尝试调用这个方法。如果对象没有定义__str__
方法,Python将回退到调用__repr__
方法。示例:
class Person: def __init__(self, name): self.name = name def __str__(self): return f'{self.name}' p = Person('Tom') print(p) # 输出: Tom
-
__repr__
:这个方法应该返回一个可以用来重新创建对象的字符串,通常是包含类名和所有属性值的字符串。它是为开发者设计的,因此输出应该尽可能准确地描述对象的状态。当使用repr()
函数转换对象,或者当对象没有定义__str__
方法而使用print()
函数时,Python会调用这个方法。示例:
class Person: def __init__(self, name): self.name = name def __repr__(self): return f'Person(name={self.name})' p = Person('Tom') print(p) # 输出: Person(name=Tom)
总结来说,__str__
更偏向于用户友好,而__repr__
更偏向于开发者友好和准确性。在大多数情况下,你应该同时定义这两个方法,以确保你的对象在不同的上下文中都有合适的字符串表示。如果你只定义了其中一个,Python会自动使用另一个作为备选。