Python 3.3+typesфункция
types.new_class()
динамическое создание классов
Создаёт класс на лету так же, как оператор class: с учётом метакласса, __init_subclass__ и __mro_entries__. Тело заполняет функция exec_body.
Синтаксис
types.new_class(name, bases=(), kwds=None, exec_body=None)
type(name, bases, ns) — короче, но это лишь вызов метакласса type: он не понимает базы вроде Generic[T] (нужен __mro_entries__) и не передаёт ключевые аргументы класса (metaclass=..., свои параметры __init_subclass__). new_class проходит тот же путь, что и class. Ловушка: созданный класс считает своим модулем types, если не задать ns['__module__'] в exec_body.
Примеры
import types
class Base:
def __init_subclass__(cls, tag='', **kw):
super().__init_subclass__(**kw)
cls.tag = tag
Child = types.new_class('Child', (Base,), {'tag': 'auto'},
lambda ns: ns.update(size=3))
print(Child.__name__, Child.tag, Child.size) # → Child auto 3
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности