Python中自定义类为什么重写__repr__方法会影响到str的输出?
在Python中,__repr__和__str__方法用于为对象提供字符串表示形式。其中__repr__方法返回的是对象的“官方”字符串表示形式,主要用于调试和开发阶段;而__str__方法返回的是对象的“非正式”字符串表示形式,主要用于用户界面和输出。
当我们在自定义类中只定义了__str__方法时,如果在交互式解释器下使用print打印这个对象,会调用该对象的__str__方法输出字符串表示形式。但是如果使用repr函数或直接在控制台输入该对象,则会调用该对象的__repr__方法。
下面是一个例子:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} ({self.age} years old)"
p = Person("Tom", 30)
print(p) # 输出:Tom (30 years old)
print(str(p)) # 输出:Tom (30 years old)
print(repr(p)) # 输出:<__main__.Person object at 0x000001>
上述代码中,我们在Person类中只定义了__str__方法,当我们使用print函数或str方法打印输出Person对象p时,会调用该对象的__str__方法,输出格式为“姓名 (年
本文探讨Python中自定义类重写__repr__方法如何影响__str__的输出。__repr__返回对象的官方字符串表示,用于调试;__str__返回非正式表示,用于用户界面。当仅重写__str__,print和str调用__str__,repr和直接输入调用__repr__。若仅重写__repr__,所有输出方式都会调用__repr__,可能导致意外结果。要确保__repr__和__str__返回不同字符串以避免混淆。
订阅专栏 解锁全文
181

被折叠的 条评论
为什么被折叠?



