首页 > 解决方案 > 自定义 __repr__ 用于 Python 中的漂亮打印

问题描述

我从这里得到了一段代码,关于使用__repr__来获得漂亮的打印。但是,我想修改这段代码,因为在循环中使用它时,我总是出错: maximum recursion depth exceeded

问题是,我不知道如何修改它,因为我没有清楚地理解这个自定义,甚至我已经从这里__repr__阅读了一些解释。

代码:

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'

对递归部分非常困惑,感谢任何评论,谢谢!

标签: pythonpython-3.xrecursiontreerepr

解决方案


repr__repr__除了调用它的参数的方法之外什么都不做。因为self.valueis 可能不是, 的实例nodeself.value.__repr__所以不是递归调用。

child.__repr__,出于所有实际目的,一个递归调用,所以你是正确的,它level是递归树中当前调用的“深度”的度量。

ret只是每个孩子的表示的串联。这些与根的表示相结合,产生以当前节点为根的整个树的表示。


推荐阅读