如何在Python中打印对象列表时应用__str__函数

时间:2010-08-24 16:04:31

标签: python list object printing string

这个交互式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,但结果相同。

3 个答案:

答案 0 :(得分:38)

尝试:

class Test:
   def __repr__(self):
       return 'asd'

阅读此documentation link

答案 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__()

     

这通常用于调试,因此表示信息丰富且明确无误。