python - 使用 __str__ 表示在容器中打印对象

标签 python operator-overloading

我注意到,当具有重载的 __str__ 方法的实例作为参数传递给 print 函数时,它会按预期打印。但是,当将包含这些实例之一的容器传递给 print 时,它会改用 __repr__ 方法。也就是说,print(x) 显示了 x 的正确字符串表示,并且 print(x, y) 工作正常,但是 print([x])print((x, y)) 打印 __repr__ 表示。

首先,为什么会发生这种情况?其次,在这种情况下,有没有办法纠正 print 的这种行为?

最佳答案

使用对象的 __str__ 的容器的问题是总的歧义——比如说,如果 print L 显示 [1 , 2]? L 可以是 ['1, 2'](其字符串项包含逗号的单个项目列表)或四个 2 项列表中的任何一个(因为每个项目都可以是字符串或整数)。 print 类型的歧义当然很常见,但项目数量的总歧义(因为每个逗号可能是分隔项目的部分字符串项目)是决定性的考虑因素。

关于python - 使用 __str__ 表示在容器中打印对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2634552/

相关文章:

java - 为什么 Java 不提供运算符重载?

c - 如果 c 不支持运算符重载,我们如何在#include 指令中使用小于号( '<' 或什至大于( '>'))?

c++ - 为什么我们将对象的引用作为参数传递给重载输出运算符

c++ - 覆盖 ADL 选择的重载

python - 是否可以在 Tkinter 中禁用左右箭头键?

python - 从字符串中解析始发城市/目的地城市

python - 如何将一个函数的输出用作另一个函数的参数

python - 如何在 QtCharts 中添加子图?

python - 通过 id 列表过滤 pandas 数据框

c++ - 如果类对象需要在 C++ 中转换为 int,为什么会调用 "operator bool()"?