使__import__获取动态添加的方法

时间:2010-08-30 22:09:43

标签: python metaprogramming

在我的工作场所有一个脚本(一种自动化系统),可以从XML文件加载和运行我们的应用程序测试。

在进程的中间,脚本调用__import__(testModule),从文件中加载模块。

当我尝试通过在运行时向testModule动态添加功能来添加功能时,问题就开始了。

正如预期的那样,__import__获取的模块的旧版本没有我刚刚在运行时添加的方法。

是否可以让__import__调用导入更新版本的类(包括我添加的方法)?

请注意,我更喜欢保持自动化系统不受影响(即使它有助于更​​快地解决问题)。

由于

塔尔。

2 个答案:

答案 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)

可能有用。