在Python中,__str__
和__repr__
是两个特殊方法,用于定义对象的字符串表示形式。它们之间有一些区别,主要体现在它们的用途和调用时机上。
__str__
方法:- 用途:
__str__
方法定义了对象的“用户友好”或“格式化”字符串表示形式。通常,这个方法被用于print()
函数和str()
函数。 - 调用时机:当你使用
print()
函数或str()
函数时,如果对象定义了__str__
方法,那么它会被调用。
例如:
class MyClass: def __str__(self): return "This is a user-friendly string representation of the object." obj = MyClass() print(obj) # 调用 __str__ 方法
- 用途:
__repr__
方法:- 用途:
__repr__
方法定义了对象的“官方”或“开发者友好”字符串表示形式,通常应该是一个可以用来重新创建对象的表达式。它用于repr()
函数、交互式解释器中直接输入对象名字、以及在调试时显示对象。 - 调用时机:如果对象没有定义
__str__
方法,或者__str__
方法返回一个非字符串的对象,那么在调用print()
函数或str()
函数时,会调用__repr__
方法。
例如:
class MyClass: def __repr__(self): return "MyClass()" obj = MyClass() print(obj) # 调用 __repr__ 方法
- 用途:
通常情况下,建议实现__repr__
方法,以确保对象在交互式环境和调试中能够提供有用的信息。如果希望对象在一般情况下也有友好的字符串表示,那么可以同时实现__str__
方法。如果只实现了__repr__
而没有实现__str__
,则在调用print()
函数时,会调用__repr__
方法。