在我的工作场所有一个脚本(一种自动化系统),可以从XML文件加载和运行我们的应用程序测试。
在进程的中间,脚本调用__import__(testModule)
,从文件中加载模块。
当我尝试通过在运行时向testModule
动态添加功能来添加功能时,问题就开始了。
正如预期的那样,__import__
获取的模块的旧版本没有我刚刚在运行时添加的方法。
是否可以让__import__
调用导入更新版本的类(包括我添加的方法)?
请注意,我更喜欢保持自动化系统不受影响(即使它有助于更快地解决问题)。
由于
塔尔。
答案 0 :(得分:2)
您需要知道重新加载模块不会神奇地替换旧实例。即使您执行reload
,也只有新对象才会使用新代码!
在运行时替换代码的唯一方法是将所有包装在代理对象中!你有时可以这样做,即对于特定的,独立的模块,但在大多数情况下,这根本不是一种合理的方法。
快速演示:
>>> import asd
>>> asd.s
'old'
>>> t = asd.s
>>> reload(asd) # I edited asd.py before
<module 'asd' from 'asd.py'>
>>> asd.s # new module content
'new'
>>> t # but this is still old!
'old'
答案 1 :(得分:1)
reload(testmodule)
可能有用。