自定义 __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

我的问题:

  1. 递归中的repr__repr__一样吗?
  2. 变量level是否表示recursion深度?
  3. 这一行的目的是什么 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 表示的串联。这些与根的表示相结合,产生以当前节点为根的整棵树的表示。