在Python中获取AST节点的父节点

时间:2016-01-02 21:38:16

标签: python python-3.x abstract-syntax-tree

我正在使用Python 3中的抽象语法树。ast库提供了许多方法来获取节点的子节点(您可以使用iter_child_nodes()walk())但没有办法得到一个。此外,每个节点都有指向其子节点的链接,但它没有指向其父节点的链接。

如果我不想为ast库编写一些插件,我如何获得AST节点的父节点

最正确的方法是什么?

3 个答案:

答案 0 :(得分:13)

以下是一些实际代码:

for node in ast.walk(root):
    for child in ast.iter_child_nodes(node):
        child.parent = node

不需要哈希表,只需将属性直接放在节点上即可。

答案 1 :(得分:3)

您可以创建一些哈希表,将AST节点关联到AST节点,并扫描(递归地)最顶层的AST树,以在该哈希表中注册每个节点的父节点。

答案 2 :(得分:1)

它不会真的是一个插件,但你总是可以编写一个函数,在每个孩子中为父母添加一个弱参数。