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>