<分区>
基本上,我想强制一个变量,让我们将他称为 jim
到我作为全局加载的插件中,在插件加载之前,例如:
load_plugin('blah', variables={'jim':1}) #For instance
然后在 blah.py
中:
print jim #prints 1
有什么简单的方法可以做到这一点吗?如果它不在标准库中也没什么大不了的。
<分区>
基本上,我想强制一个变量,让我们将他称为 jim
到我作为全局加载的插件中,在插件加载之前,例如:
load_plugin('blah', variables={'jim':1}) #For instance
然后在 blah.py
中:
print jim #prints 1
有什么简单的方法可以做到这一点吗?如果它不在标准库中也没什么大不了的。
最佳答案
不 - 没有办法在 插件被首先导入之前做到这一点 - 所以,如果你的变量在模块主体本身中使用,你就不走运了。
如果变量在模块的函数或方法(但不是类主体)中用作全局变量,则可以在导入模块后更改它,只需执行以下操作:
import module
module.jim = 5
你可能知道。 (而且我知道这不是您要的)。
因此,实现该目标的唯一方法是解析模块的源代码,并更改那里的变量分配,保存源代码并将其导入。好吧,有办法用内存中的源代码模拟导入,但这种方法太不切实际了,我们不应该详细介绍。
如果您可以控制要以这种方式进行猴子修补的模块的源代码,我的建议是使用一个配置文件,模块将从中选择变量名称。
然后生成配置文件,执行导入(注意它尚未导入到 sys.modules 中),然后就完成了。
关于python - 在导入之前/期间注入(inject)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944806/
相关文章:
python - 使用 python 对 Robot Framework 中的测试套件中的每个测试用例进行测试设置和拆卸
python - 两个进程之间的IPC示例,opencv(cv::Mat对象)c++作为服务器,python作为客户端
python - 如何使用discord.py 获取discord 用户的用户ID
python - 有没有办法检测 python 程序何时结束?
python - 从 str 派生的类的构造函数,具有不同的签名
python - __cmp__ 方法在 Python 2.x 中是否没有按预期工作?