Получение родительского узла AST в Python
Я работаю с абстрактными деревьями Синтаксиса в Python 3. The ast
библиотека дает много способов получить дочерние узлы узла (вы можете использовать iter_child_nodes()
или walk()
), но нет способа получить родитель одного. Кроме того, каждый узел имеет ссылки на своих потомков, но он не имеет ссылок на своего родителя.
как я могу получить родителя узла AST если я не хочу писать какой-то плагин для ast
библиотеки?
какой самый правильный способ сделать это?
3 ответов
вы можете создать некоторую хэш-таблицу, связывающую узлы AST с узлами AST, и сканировать (рекурсивно) самое верхнее дерево AST, чтобы зарегистрировать в этой хэш-таблице родителя каждого узла.
вот собственно код:
for node in ast.walk(root):
for child in ast.iter_child_nodes(node):
child.parent = node
нет необходимости в хэш-таблице, вы можете просто поставить атрибут непосредственно на узле.
Это не будет действительно плагин, но вы всегда можете написать функцию, которая добавляет weakref к родителю в каждом ребенке.