我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是:
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方式吗?
答案 0 :(得分:1)
您需要覆盖__str__
的{{1}}方法,而不是list
或A
,因为这是递归需要开始的地方。也就是说,要将列表转换为字符串,您需要递归地将列表中的每个对象转换为字符串。不幸的是,你做不到。你能做的最好的事情就是写一个单独的函数,比如
B
答案 1 :(得分:1)
@Blckknight应该提交作为答案,因为这似乎是正确的答案(它适用于我非常相似的问题):
**覆盖 repr ()而不是 str ()
def __repr__(self):
return "abc"
您也可以添加此内容以获得完整性 def str (个体经营): 返回自我。 repr ()
@Blckknight如果你想重新提交作为积分的答案,你应该。我希望我可以添加评论,但我没有这样的声誉。