2016-01-02 91 views
7

我與抽象語法樹在Python 3工作的ast庫提供了多種方式來獲取節點的孩子(你可以使用iter_child_nodes()walk()),但沒有辦法得到一個。另外,每個節點都有鏈接到它的子節點,但它沒有鏈接到它的父節點。獲取AST節點的父在Python

如何我可以得到AST節點的父節點如果我不想寫一些插件到ast庫?

什麼是最正確的方法來做到這一點?

+0

您可以遍歷樹並創建反向查找表。 –

回答

2

您可以創建一個將AST節點與AST節點相關聯的散列表,並掃描(遞歸)您最上面的AST樹,以在該散列表中註冊每個節點的父節點。

1

這不會是一個插件,但你可以隨時編寫一個函數,在每個孩子中添加一個weakref給父母。

5

下面是一些實際的代碼:

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

沒有必要爲一個哈希表,你可以把一個屬性直接的節點上。