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

时间:2017-07-08 17:05:58

标签: python python-3.x

我使用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模块/范围)中。怎么办?

1 个答案:

答案 0 :(得分:1)

在事实之后设置__module__属性:

A.__module__ == '__main__'

您可以在exec_body callable中执行此操作:

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