Python Glossary English

все 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Сообщить о неточности