如何打印使用 [​​=10=] 实现的树数据结构?

How to pprint a tree data structure that is implemented using classes?

我知道 pprint 可以 pretty-print 嵌套列表或字典,它们都是树结构类型,但我想 pprint 一个 class-based 树任意数量的 children,使得节点根据它们在树中的级别向右缩进。

pprint 可以用来做我想做的事吗?如果可以,怎么做?我可以编写自己的函数 pretty-print 是一棵树,但我想检查是否需要这样做。

考虑以下示例:

class Tree:
    def __init__(self, value, *args):
        self.value = value
        self.children = args

tree = Tree("+", Tree(1), Tree("*", Tree(2), Tree(3)))

这是我的预期输出,如果我们要 pretty-print 树:

+
    1
    *
        2
        3

同样,我当然可以推出自己的功能,但我想看看我是否可以使用 pprint 来代替它是否会更容易,我只是忽略了一些东西。

pprint documentation 没有为我的用例提供示例。

如果有区别,我正在使用 Python 2.7.

pprint 与定义了 __repr__ 方法的任意 类 一起工作。

要在这里得到你想要的东西,我认为你必须管理自己的嵌套,此时你可以只使用 print

def __repr__(self, depth=1):
    return_string = [str(self.value)]
    for child in self.children:
        return_string.extend(["\n", " " * (depth+1), child.__repr__(depth+1)])
    return "".join(return_string)

然后 pprint(tree)print tree 都给你

+
  1
  *
   2
   3