自定义 __repr__ 用于 Python 中的漂亮打印
Self defined __repr__ for pretty print in 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
只是每个 child 表示的串联。这些与根的表示相结合,产生以当前节点为根的整棵树的表示。
我从 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
只是每个 child 表示的串联。这些与根的表示相结合,产生以当前节点为根的整棵树的表示。