You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中为何__str__无法正常打印对象列表,而__repr__可以?

为什么打印对象列表时只有__repr__能生效?

这是因为Python对不同场景下的字符串转换逻辑有明确区分:

  • 当你直接print单个对象(比如print(player1))时,Python会调用该对象的__str__方法,这也是为什么你只实现__str__时,单个实例能正常显示自定义内容。
  • 但当你打印列表这类容器时,Python会对容器内的每个元素调用__repr__方法,而不是__str__。如果你的类没有自定义__repr__,就会使用默认的实现——显示对象的类型和内存地址,也就是你看到的<classes.Player object at 0x...>这种格式。

简单总结两者的设计定位:

  • __str__是给普通用户看的友好输出,用于直接打印单个对象的场景。
  • __repr__是给开发者看的明确描述,用于容器打印、交互式命令行输出等场景,设计初衷是让输出的字符串尽可能能还原出对象(非强制要求)。

对应你的代码场景:

  • 实现__repr__后,列表打印时每个元素都会调用这个自定义方法,所以能得到[N: p1, N: p2, N: p3]的预期结果。
  • 只实现__str__时,列表打印依赖默认__repr__,所以显示对象地址,而单个print调用__str__所以正常显示。

内容的提问来源于stack exchange,提问作者Slappy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:19:52