在我的程序中使用reload时,我无法弄清楚如何解决我遇到的问题。 如果我的代码是
import mymodule
from mymodule import MYCLASS
x = MYCLASS()
然后一切正常。但是,如果我尝试像这样重新加载模块:
import mymodule
from mymodule import MYCLASS
x = MYCLASS()
reload(mymodule)
y = MYCLASS()
我得到一些奇怪的错误。我理解可能是因为MYCLASS
和mymodule
的引用已经改变,但无法准确理解为什么以及如何防止它。
重新加载在这种情况下导入的模块和类的正确方法是什么?
答案 0 :(得分:3)
您应该使用以下样式重新加载。
import mymodule
x = mymodule.MYCLASS()
mymodule = reload(mymodule)
y = mymodule.MYCLASS()
http://docs.python.org/2/library/functions.html#reload
如果模块使用from ... import从另一个模块导入对象 ...,为其他模块调用reload()不会重新定义 从它导入的对象 - 解决这个问题的方法是重新执行 从声明,另一个是使用导入和限定名称 (模块。名称)代替。
<强>更新强>
isinstance(x, mymodule.MYCLASS)
将False
,因为该类已重新初始化,但x.__class__
仍引用旧类。
>>> isinstance(x, mymodule.MYCLASS)
False
>>> isinstance(y, mymodule.MYCLASS)
True