正如评论已经表明的那样,在当今的Python中,实例化没有内置名称的类型的首选方法是调用通过标准库中的类型模块获得的类型:
>>> import types>>> m = types.ModuleType('m', 'The m module')
请注意,这并 不会 自动插入新的模块
sys.modules:
>>> import sys>>> sys.modules['m']Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 'm'
这是您必须手动执行的任务:
>>> sys.modules['m'] = m>>> sys.modules['m']<module 'm' (built-in)>
这很重要,因为模块的代码对象通常会 在 添加到模块 后
执行
sys.modules-例如,完全正确地引用此类代码,如果您忘记了此步骤
sys.modules[__name__],将失败(
KeyError)。
完成 此步骤并进行
m.__file__修改后,
>>> pre = compile("a=23", "m.py", "exec")>>> exec pre in m.__dict__>>> m.a23
(
exec当然,如果您使用的是Python 3,则为Python
3的等效函数;-)当然是正确的(当然,通常您会通过精巧的方法而不是编译字符串来获取代码对象,但是这对您的问题并不重要;-)。
在旧版本的Python中,您一开始会使用
new模块而不是
types模块来创建新的模块对象,但
new自Python
2.6起已弃用该模块,并在Python 3中将其删除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)