Python:如何在print中递归应用__str__

时间:2016-02-01 01:49:46

标签: python

我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是:

class A():
    def __str__(self):
        return 'abc'

class B():
    def __str__(self):
        return str(A())

a,b=A(),B()
C=[[a],b]
print(C)

然后输出应该像:[[<__main__.A object at 0x02D99910>], <__main__.B object at 0x02DD5030>],但我希望它以递归方式应用自定义__str__,甚至可以在嵌套列表或类中工作,即我希望输出为[['abc'],'abc'] 。有任何pythonic方式吗?

2 个答案:

答案 0 :(得分:1)

您需要覆盖__str__的{​​{1}}方法,而不是listA,因为这是递归需要开始的地方。也就是说,要将列表转换为字符串,您需要递归地将列表中的每个对象转换为字符串。不幸的是,你做不到。你能做的最好的事情就是写一个单独的函数,比如

B

答案 1 :(得分:1)

@Blckknight应该提交作为答案,因为这似乎是正确的答案(它适用于我非常相似的问题):

**覆盖 repr ()而不是 str ()

def __repr__(self):
    return "abc"

您也可以添加此内容以获得完整性     def str (个体经营):         返回自我。 repr ()

@Blckknight如果你想重新提交作为积分的答案,你应该。我希望我可以添加评论,但我没有这样的声誉。