Я пишу программу Python (3.6) для динамического генерации классов из предоставленных пользователем файлов Yaml.
Процесс кажется довольно простым с помощью type()
, но я не могу управлять именем модуля сгенерированного класса.
Минимальный пример:
>>> x = type('hey.Ho', (), {})
>>> x
__main__.hey.Ho
Более того (ближе к моему реальному коду):
>>> from abc import ABCMeta
>>> class BaseClass(metaclass=ABCMeta):
... pass
>>> x = type('hey.Ho', (BaseClass,), {})
>>> x
abc.hey.Ho
Как получить мое новое пространство имен для имен просто hey.Ho
?
Вы хотите установить атрибут класса __module__
:
>>> type('Ho', (), {'__module__': 'hey'})
<class 'hey.Ho'>
type
. Первый аргумент должен быть именем класса. "эй. Хо" не имя класса. Это должно быть просто "Хо".abc.Ho