str(x)
/ repr(x)
是 Python 解释器提供的内置函数,永远可用,它们内部会去调用对象的方法
__str__
/ __repr__
是你 在类里定义的特殊方法,决定当对象被 str()
/ repr()
或 print()
时到底输出什么
str()
→ 给人看(漂亮、简洁)。repr()
→ 给机器/调试看(尽量能 eval
回来)。__repr__
或 __str__
→ 继承自 object
的这两个方法。“最顶层的默认实现”就是 Python 内置的 object 类里自带的: Python 复制 def __repr__(self): return f'<{self.__class__.__module__}.{self.__class__.__qualname__} object at {hex(id(self))}>' def __str__(self): return self.__repr__() # 如果没有重写 __str__,就直接用 __repr__
print(obj)
→ 触发 __str__
→ 发现没重写 → 退回到 __repr__
→ 最终输出<__main__.类名 object at 0x内存地址>
。print(m1),m1是某个类对象
__str__
有没有被定义 → 如果有,就调用 str(m1)
,结果给 print
。__str__
,就会退而求其次调用 repr(m1)
,也就是 __repr__
。