все Python 3astпонятие
ast.Attribute
выражения
Узел доступа к атрибуту obj.name: выражение-владелец в value, имя атрибута строкой в attr и контекст ctx (Load, Store или Del).
Синтаксис
ast.Attribute(value, attr, ctx)
Поле attr — обычная строка, а не узел Name, поэтому visitor с visit_Name имена атрибутов не увидит. Цепочка a.b.c вложена справа налево: внешний узел — атрибут c, а в его value лежит Attribute для a.b. В a.b.c = 1 контекст Store получает только внешний узел, всё внутри читается с Load.
Примеры
import ast
node = ast.parse('a.b.c = 1').body[0].targets[0]
print(node.attr, type(node.ctx).__name__) # → c Store
print(node.value.attr, type(node.value.ctx).__name__) # → b Load
print(node.value.value.id) # → a
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности