все Python 3astпонятие
ast.ClassDef
функции и классы
Узел определения класса: имя, базовые классы, именованные аргументы (metaclass=…), тело, декораторы и с 3.12 параметры типа.
Синтаксис
ast.ClassDef(name, bases, keywords, body, decorator_list, type_params)
metaclass=M лежит не в bases, а в keywords — как именованный аргумент вызова. name — строка, а декораторы — отдельный список decorator_list, причём с 3.8 lineno узла указывает на строку class, а не на первый декоратор. Набор полей вырос в 3.12 (type_params), поэтому код, сравнивающий _fields или распаковывающий их позиционно, ломается между версиями.
Примеры
import ast
src = '@register\nclass Model(Base, metaclass=Meta):\n pass'
node = ast.parse(src).body[0]
print(node.name, [b.id for b in node.bases]) # → Model ['Base']
print([k.arg for k in node.keywords], node.lineno) # → ['metaclass'] 2
print([d.id for d in node.decorator_list]) # → ['register']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности