3

基本上,我想强制一个变量,让我们在插件加载之前jim将他调用到我作为全局加载的插件中,例如:

load_plugin('blah', variables={'jim':1}) #For instance

然后在里面blah.py

print jim #prints 1

有什么简单的方法可以做到这一点?如果它不在标准库中,这没什么大不了的。

4

2 回答 2

2

不 -在首先导入插件之前没有办法做到这一点- 所以,如果你的变量被用于模块主体本身,你就不走运了。

如果变量在模块的函数或方法(但不是类主体)中用作全局变量,则可以在导入模块后更改它,只需执行以下操作:

import module
module.jim = 5

你可能知道。(而且我知道这不是您要的)。

因此,实现这一目标的唯一方法是解析模块的源代码,并在那里更改变量分配,保存源代码并导入它。好的,有办法用内存中的源代码模拟导入,但是这种方法太不切实际了,我们不应该详细说明。

如果您可以控制要以这种方式进行猴子补丁的模块的源代码,我的建议是使用一个配置文件,模块将从该配置文件中选择变量名。

然后生成配置文件,执行导入(注意它尚未导入到 sys.modules 中),然后就完成了。

于 2012-10-17T23:41:20.310 回答
-1

您可以使用__import__函数。它允许您覆盖全局变量。
例如:

__import__('blah', dict(jim=1, **globals()))
于 2012-12-05T14:38:51.923 回答