Python 3: Установить пространство имен для динамических классов

1

Я пишу программу 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?

  • 1
    Вы используете неправильный type . Первый аргумент должен быть именем класса. "эй. Хо" не имя класса. Это должно быть просто "Хо".
  • 0
    Я попробовал это. В этом случае, во втором примере, пространство имен - abc.Ho
Показать ещё 1 комментарий
Теги:
class
python-3.x
metaprogramming

1 ответ

2
Лучший ответ

Вы хотите установить атрибут класса __module__:

>>> type('Ho', (), {'__module__': 'hey'})
<class 'hey.Ho'>
  • 0
    Хах. Точечно. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню