如何从Python中的代码对象生成模块对象

如何从Python中的代码对象生成模块对象,第1张

如何从Python中的代码对象生成模块对象

正如评论已经表明的那样,在当今的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中将其删除。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5632259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存