# The first way I had of grabbing the module:
mod = __import__(__name__, fromlist=['nonempty'])
# From Roger's suggestion:
import sys
mod = sys.modules[__name__]
for name in ['A', 'B', 'C']:
class_ = type(name, (object, ), {})
setattr(mod, name, class_)
print A, B, C
第二,在当前的全局数据中设置dict:
^{pr2}$
最后,使用exec(eww):
for name in ['A', 'B', 'C']:
class_ = type(name, (object, ), {})
exec "%s = class_" % name
print A, B, C
编辑:关于评论中方法1和方法2的讨论,他们做的事情完全一样。模块的名称空间是在存储在模块(here are the docs)上的dict中定义的。从模块级别,您可以通过globals()获取此信息,而从外部您可以通过属性或模块的__dict__属性来访问它。在
互动式课程演示:
Python 2.6.4 (r264:75706, Nov 8 2009, 17:35:59)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> mod = sys.modules[__name__]
>>> mod.__dict__ is globals()
True
我可以想出几种方法。。。按照(我认为是)最好到最坏的顺序:
首先,设置当前模块的属性
第二,在当前的全局数据中设置dict:
^{pr2}$最后,使用exec(eww):
我已经在一个独立的脚本(其中
__name__ == "__main__"
)和一个更大的包中的模块测试了这三项工作。在编辑:关于评论中方法1和方法2的讨论,他们做的事情完全一样。模块的名称空间是在存储在模块(here are the docs)上的dict中定义的。从模块级别,您可以通过
globals()
获取此信息,而从外部您可以通过属性或模块的__dict__
属性来访问它。在互动式课程演示:
要动态创建类并使它们在模块
mymodule
中可用:要在当前模块中创建类,请使用Mike's answer中的方法。在
相关问题 更多 >
编程相关推荐