все Python 3astпонятие
ast.AST
корень и базовые узлы
Базовый класс всех узлов синтаксического дерева: от него наследуют Module, выражения, инструкции и операторы, которые возвращает ast.parse().
Синтаксис
class ast.AST; node._fields; node.lineno, node.col_offset
Узлы сравниваются по идентичности, а не по содержимому: ast.parse('x') == ast.parse('x') даёт False, для сравнения деревьев сравнивают ast.dump() (или ast.compare() с 3.14). Имена полей узла лежат в атрибуте класса _fields, а координаты lineno и col_offset есть у выражений, инструкций и части служебных узлов (arg, keyword, alias, except-ветки, образцы, параметры типа) — у операторов вроде Add их нет. Вывод repr() узла изменился в 3.14 (стал показывать поля), поэтому в тестах полагаются на конкретные поля, а не на печать узла целиком.
Примеры
import ast
tree = ast.parse('x + 1')
print(isinstance(tree, ast.AST)) # → True
print(ast.BinOp._fields) # → ('left', 'op', 'right')
print(tree == ast.parse('x + 1')) # → False — узлы сравниваются по идентичности
print(ast.dump(tree) == ast.dump(ast.parse('x + 1'))) # → True
import ast
node = ast.parse('a = 10').body[0]
print(node.lineno, node.col_offset, node.end_col_offset) # → 1 0 6
print(hasattr(ast.Add(), 'lineno')) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности