使用重新加载时出现奇怪的Python问题

时间:2013-06-21 10:11:46

标签: python reload

在我的程序中使用reload时,我无法弄清楚如何解决我遇到的问题。 如果我的代码是

import mymodule
from mymodule import MYCLASS

x = MYCLASS()

然后一切正常。但是,如果我尝试像这样重新加载模块:

import mymodule
from mymodule import MYCLASS
x = MYCLASS()
reload(mymodule)
y = MYCLASS()

我得到一些奇怪的错误。我理解可能是因为MYCLASSmymodule的引用已经改变,但无法准确理解为什么以及如何防止它。

重新加载在这种情况下导入的模块和类的正确方法是什么?

1 个答案:

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