Python Glossary English

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