Python 3:为动态设置命名空间 类

Python 3: Set namespace for dynamic classes

我正在编写一个 Python (3.6) 程序来从用户提供的 Yaml 文件中动态生成 classes。

这个过程使用 type() 看起来非常简单,但我无法控制生成的 class 的模块名称。

一个最小的例子:

>>> 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

如何让我的新 class 命名空间成为 hey.Ho

您要设置 class 的 __module__ 属性:

>>> type('Ho', (), {'__module__': 'hey'})
<class 'hey.Ho'>