这个交互式python控制台代码段将告诉所有内容:
>>> class Test:
... def __str__(self):
... return 'asd'
...
>>> t = Test()
>>> print(t)
asd
>>> l = [Test(), Test(), Test()]
>>> print(l)
[__main__.Test instance at 0x00CBC1E8, __main__.Test instance at 0x00CBC260,
__main__.Test instance at 0x00CBC238]
基本上我打算在打印列表时打印三个asd
字符串。我也尝试了pprint
,但结果相同。
答案 0 :(得分:38)
答案 1 :(得分:9)
实施__repr__
的其他答案中的建议绝对是一种可能性。如果由于某种原因(现有类型,__repr__
因美学以外的原因而需要)不可行,那么就这样做
print [str(x) for x in l]
或者,正如有些人肯定建议的那样,map(str, l)
(只是更紧凑)。
答案 2 :(得分:3)
您需要制作__repr__
方法:
>>> class Test:
def __str__(self):
return 'asd'
def __repr__(self):
return 'zxcv'
>>> [Test(), Test()]
[zxcv, zxcv]
>>> print _
[zxcv, zxcv]
请参阅docs:
object.__repr__(self)
由
repr()
内置函数和字符串转换(反向引号)调用,以计算对象的“官方”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境)。如果无法做到这一点,则应返回<...some useful description...>
形式的字符串。返回值必须是字符串对象。如果一个类定义__repr__()
但不定义__str__()
,那么当需要该类的实例的“非正式”字符串表示时,也会使用__repr__()
。这通常用于调试,因此表示信息丰富且明确无误。