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'>
我正在编写一个 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'>