【发布时间】:2021-07-28 01:14:35
【问题描述】:
我从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'
对递归部分非常困惑,感谢任何评论,谢谢!
【问题讨论】:
-
严格来说,它不是递归,因为即使
child是(如预期的那样)node的一个实例,每个绑定方法都是一个单独的可调用对象。不过,出于所有实际目的,您可以将其视为递归。 -
repr(self.value),虽然,是self.value.__repr__,这绝对是不是递归,假设self.value不是node的实例。
标签: python python-3.x recursion tree repr