如何设置动态创建的类的模块名称?

哈康海格兰

我正在使用 Python 3 创建一个动态类:

def setup(namespace):
    namespace['a'] = 1

A = types.new_class('A', bases=(), kwds=None, exec_body=setup)

class B:
    b = 2

print(A)
print(B)

输出

<class 'types.A'>
<class '__main__.B'>

我想将类A也放在__main__模块/范围(而不是types模块/范围)中。那怎么办呢?

马丁·彼得斯

只需在__module__事后设置属性:

A.__module__ == '__main__'

您可以在exec_body可调用文件中执行此操作

def setup(namespace):
    namespace['a'] = 1
    namespace['__module__'] = '__main__'

演示:

>>> import types
>>> def setup(namespace):
...     namespace['a'] = 1
...
>>> A = types.new_class('A', bases=(), kwds=None, exec_body=setup)
>>> A.__module__ = '__main__'
>>> A
<class '__main__.A'>

exec_body()可调用:

>>> def setup(namespace):
...     namespace['a'] = 1
...     namespace['__module__'] = '__main__'
...
>>> A = types.new_class('A', bases=(), kwds=None, exec_body=setup)
>>> A
<class '__main__.A'>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章