如何解决自定义 __repr__ 用于 Python 中的漂亮打印
我有一段来自 here 的代码,关于使用 __repr__
获得某种漂亮的打印效果。但是,我想修改此代码,因为在循环中使用它时,总是出现错误: maximum recursion depth exceeded
问题是,我不知道怎么修改,因为我对这个自定义的__repr__
理解的不是很清楚,甚至看过here的一些解释。
代码:
class node(object):
def __init__(self,value):
self.value = value
self.children = []
def __repr__(self,level=0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__repr__(level+1)
return ret
我的问题:
-
repr
是否与递归中的__repr__
相同? - 变量
level
是否表示recursion
深度? - 这行
ret += child.__repr__(level+1)
的目的是什么?
我使用这段代码的目的:遍历一棵树并打印如下:
'grandmother'
'daughter'
'granddaughter'
'grandson'
'son'
'granddaughter'
'grandson'
对递归部分非常困惑,感谢任何评论,谢谢!
解决方法
repr
除了调用其参数的 __repr__
方法外不做任何事情。由于 self.value
很可能不是 node
的实例,因此 self.value.__repr__
不是递归调用。
child.__repr__
,就所有实际目的而言,是一个递归调用,因此您是正确的,level
是当前调用在递归树。
ret
只是每个孩子的表示的串联。这些,结合根的表示,产生以当前节点为根的整个树的表示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。