python - 自定义 __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
我的问题:
- 和递归中的
repr
一样吗?__repr__
- 是变量
level
表示recursion
深度吗? - 这条线的目的是什么
ret += child.__repr__(level+1)
?
我使用此代码的目的:遍历树并打印如下:
'grandmother'
'daughter'
'granddaughter'
'grandson'
'son'
'granddaughter'
'grandson'
对递归部分非常困惑,感谢任何评论,谢谢!
解决方案
repr
__repr__
除了调用它的参数的方法之外什么都不做。因为self.value
is 可能不是, 的实例node
,self.value.__repr__
所以不是递归调用。
child.__repr__
,出于所有实际目的,是一个递归调用,所以你是正确的,它level
是递归树中当前调用的“深度”的度量。
ret
只是每个孩子的表示的串联。这些与根的表示相结合,产生以当前节点为根的整个树的表示。
推荐阅读
- reactjs - react-hightchart:event.point 中的所有值都为空
- reactjs - Antd列标题中的Unicode字符?
- python - Pandas 将字典列表(GA 输出)转换为有意义的数据帧
- cmake - 如何在不删除和重新创建构建目录的情况下从头开始重新运行 CMake
- java - 如何使用 sh() 命令在 Jenkinsfile 中设置 ENV 变量
- java - 可以在json中进行区分和过滤吗?
- caching - 如何防止人们绕过我的服务器缓存?
- c# - Binding 无法识别 OnPropertyChanged
- ios - 如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知
- json - 在 ReactXP 中导入 JSON 文件