【发布时间】:2010-11-08 00:23:40
【问题描述】:
假设您有一个从模块内的类实例化的对象。 现在,您重新加载该模块。 您想做的下一件事是使重新加载影响该类。
mymodule.py
---
class ClassChange():
def run(self):
print 'one'
myexperiment.py
---
import mymodule
from mymodule import ClassChange # why is this necessary?
myObject = ClassChange()
myObject.run()
>>> one
### later, i changed this file, so that it says print 'two'
reload(mymodule)
# trick to change myObject needed here
myObject.run()
>>> two
您是否必须创建一个新的 ClassChange 对象,将 myObject 复制到其中,然后删除旧的 myObject?还是有更简单的方法?
编辑:run() 方法看起来像一个静态类风格的方法,但这只是为了简洁。我希望 run() 方法对对象内部的数据进行操作,所以静态模块函数不会这样做...
【问题讨论】:
-
回答您的子问题“为什么需要这样做?”:不是。 import mymodule 将 mymodule 放到命名空间中,但 mymodule 本身是一个命名空间,其中包含 ClassChange,所以你必须使用 mymodule.ClassChange 来解决它
-
谢谢 balpha,我一直想知道这一点 :)
-
所有这些答案对我来说都是很好的思考。我还不知道哪个答案是正确的,所以我会在选择之前尝试一些解决方案。谢谢! :)
-
您可能希望在此问题与上一个问题之间的链接中进行编辑。任何对其中一个感兴趣的人都可能想看看另一个。
-
提到的相关balpha是:stackoverflow.com/questions/1080521/…
标签: python module reload python-import