我與抽象語法樹在Python 3工作的ast
庫提供了多種方式來獲取節點的孩子(你可以使用iter_child_nodes()
或walk()
),但沒有辦法得到父一個。另外,每個節點都有鏈接到它的子節點,但它沒有鏈接到它的父節點。獲取AST節點的父在Python
如何我可以得到AST節點的父節點如果我不想寫一些插件到ast
庫?
什麼是最正確的方法來做到這一點?
我與抽象語法樹在Python 3工作的ast
庫提供了多種方式來獲取節點的孩子(你可以使用iter_child_nodes()
或walk()
),但沒有辦法得到父一個。另外,每個節點都有鏈接到它的子節點,但它沒有鏈接到它的父節點。獲取AST節點的父在Python
如何我可以得到AST節點的父節點如果我不想寫一些插件到ast
庫?
什麼是最正確的方法來做到這一點?
您可以創建一個將AST節點與AST節點相關聯的散列表,並掃描(遞歸)您最上面的AST樹,以在該散列表中註冊每個節點的父節點。
這不會是一個插件,但你可以隨時編寫一個函數,在每個孩子中添加一個weakref給父母。
下面是一些實際的代碼:
for node in ast.walk(root):
for child in ast.iter_child_nodes(node):
child.parent = node
沒有必要爲一個哈希表,你可以把一個屬性直接的節點上。
您可以遍歷樹並創建反向查找表。 –