基本上,我想强制变量,让我称之为jim
插入我作为全局加载的插件,插件加载,例如:
load_plugin('blah', variables={'jim':1}) #For instance
然后在blah.py
内:
print jim #prints 1
有没有简单的方法可以做到这一点?如果它不在标准库中,那就没什么大不了的了。
答案 0 :(得分:1)
不 - 在首先导入插件之前没有办法 - 所以,如果你的变量在模块体中使用,那你就不走运了。 / p>
如果变量在模块的函数或方法(而不是类体)中用作全局变量,则可以在导入模块后立即更改它:
你可能知道的。 (而且我知道这不是你所要求的)。import module
module.jim = 5
因此,实现这一目标的唯一方法是解析模块的源代码,并在那里更改变量赋值,保存源代码并导入它。好的,有一些方法可以用内存中的源代码模拟导入,但是这种方法非常不合理,我们不应该详细说明。
如果您可以通过这种方式控制模块的源代码,我的建议是使用配置文件,模块将从中选择变量名称。
然后生成配置文件,执行导入(注意它尚未导入到sys.modules中)并且完成了。
答案 1 :(得分:-1)
您可以使用__import__功能。它允许你覆盖全局变量。
例如:
__import__('blah', dict(jim=1, **globals()))