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

那么这个交互式的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] 

基本上我打印列表时打印三个string。 我也尝试过pprint但它给出了相同的结果。

尝试:

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

并阅读这个文档链接 :

其他答案中的build议__repr__肯定是一种可能性。 如果由于某种原因(现有types, __repr__由于美学以外的原因而需要)等是不可行的,那么只要

 print [str(x) for x in l] 

或者像某些人一定会build议的那样, map(str, l) (只是更简洁一些)。

你需要做一个__repr__方法:

 >>> class Test: def __str__(self): return 'asd' def __repr__(self): return 'zxcv' >>> [Test(), Test()] [zxcv, zxcv] >>> print _ [zxcv, zxcv] 

请参阅文档 :

object.__repr__(self)

repr()内置函数和string转换(反引号)调用来计算对象的“官方”string表示forms。 如果可能的话,这应该看起来像一个有效的Pythonexpression式,可以用来重新创build一个具有相同值的对象(给定一个合适的环境)。 如果这是不可能的,应该返回一个<...some useful description...>forms的string。 返回值必须是一个string对象。 如果一个类定义了__repr__()而不是__str__() ,则当需要该类的实例的“非正式”string表示时,也会使用__repr__()

这通常用于debugging,因此重要的是表示信息丰富和明确。