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