我正在使用Python 3中的抽象语法树。ast
库提供了许多方法来获取节点的子节点(您可以使用iter_child_nodes()
或walk()
)但没有办法得到一个父。此外,每个节点都有指向其子节点的链接,但它没有指向其父节点的链接。
如果我不想为ast
库编写一些插件,我如何获得AST节点的父节点?
最正确的方法是什么?
答案 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)
它不会真的是一个插件,但你总是可以编写一个函数,在每个孩子中为父母添加一个弱参数。