一文让你彻底搞懂Python中__str__和__repr__
在Python中,__str__
和__repr__
是两个常用的魔术方法,它们都可以用来返回对象的字符串表示,但是有些细微的区别。
__str__
和__repr__
的区别
总体来说,__repr__
用于开发者调试、测试和错误记录,而__str__
用于最终用户展示。
当你需要了解对象的内部细节时,可以打印__repr__
的返回值;当你需要展示对象的信息给最终用户时,可以打印__str__
的返回值。两者的目的不同,返回值的风格也不同。
__repr__
__repr__
用于返回对象的字符串表示,通常这个字符串可以用来重建当前对象。在Python中,如果一个对象没有定义__str__
方法,解释器会调用__repr__
方法来显示对象。
示例1:
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("Tom", 18)
print(p) # 当没有定义__str__时,会调用__repr__方法来显示对象
输出:
Person(Tom, 18)
示例2:
>>> import datetime
>>> d = datetime.datetime.now()
>>> d
datetime.datetime(2021, 11, 27, 12, 21, 35, 158157)
>>> repr(d)
'datetime.datetime(2021, 11, 27, 12, 21, 35, 158157)'
__str__
__str__
用于返回对象的字符串表示,通常这个字符串可以用来展示给最终用户。在Python中,如果一个对象定义了__str__
方法,可以使用print
等函数来展示对象。
示例1:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person({self.name}, {self.age})"
def __str__(self):
return f"Name: {self.name}, Age: {self.age}"
p = Person("Tom", 18)
print(p) # 使用__str__方法来显示对象
输出:
Name: Tom, Age: 18
示例2:
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.__str__()
'2021-11-27 12:21:35.158157'
>>> str(d)
'2021-11-27 12:21:35.158157'
总结
在编写Python代码时,我们应该在类中同时定义__str__
和__repr__
方法。__repr__
方法用于对象的调试、测试和错误记录,__str__
方法用于最终用户展示。
两者的实现方式可能有所不同,__repr__
方法通常返回一个可以重建对象的字符串,而__str__
方法通常返回一个展示给用户的字符串。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文让你彻底搞懂Python中__str__和__repr__ - Python技术站