Python __str__和列表

在Java中,如果我调用List.toString(),它将自动调用List中每个对象上的toString()方法。 例如,如果我的列表包含对象o1,o2和o3,则list.toString()将如下所示:

"[" + o1.toString() + ", " + o2.toString() + ", " + o3.toString() + "]" 

有没有办法在Python中获得类似的行为? 我在我的类中实现了一个__str __()方法,但是当我打印出一个对象列表时,使用:

 print 'my list is %s'%(list) 

它看起来像这样:

 [<__main__.cell instance at 0x2a955e95f0>, <__main__.cell instance at 0x2a955e9638>, <__main__.cell instance at 0x2a955e9680>] 

我怎么能得到python自动调用__str__列表中的每个元素(或字典)呢?

调用python列表中的string调用每个元素内的__repr__方法。 对于一些项目, __str____repr__是相同的。 如果你想要这样的行为,做:

 def __str__(self): ... def __repr__(self): return self.__str__() 

您可以使用列表理解来自动生成每个项目str()'d的新列表:

 print([str(item) for item in mylist]) 

两件简单的事情你可以做,使用mapfunction或使用理解。

但是,这会得到一个string列表,而不是一个string。 所以你也必须一起joinstring。

 s= ",".join( map( str, myList ) ) 

要么

 s= ",".join( [ str(element) for element in myList ] ) 

然后你可以打印这个复合string对象。

 print 'my list is %s'%( s ) 

根据你想要使用的输出,可能__repr__可能更合适:

 import unittest class A(object): def __init__(self, val): self.val = val def __repr__(self): return repr(self.val) class Test(unittest.TestCase): def testMain(self): l = [A('a'), A('b')] self.assertEqual(repr(l), "['a', 'b']") if __name__ == '__main__': unittest.main() 

我同意之前关于使用列表parsing来做这件事的答案,但是你肯定可以把它隐藏起来,如果这就是浮在你的船上的话。

 def is_list(value): if type(value) in (list, tuple): return True return False def list_str(value): if not is_list(value): return str(value) return [list_str(v) for v in value] 

为了好玩,我做了list_str()recursion的str()包含在列表中的所有东西。

你可以使用格式。

  def __str__(self): return("my list is".format(self.list1)) 

像这样的东西?

 a = [1, 2 ,3] [str(x) for x in a] # ['1', '2', '3']