1

我不知道如何解决在我的程序中使用 reload 时遇到的问题。如果我的代码像

import mymodule
from mymodule import MYCLASS

x = MYCLASS()

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

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

我得到一些奇怪的错误。我知道这可能是因为MYCLASS和 of的引用发生了mymodule变化,但无法准确理解为什么以及如何防止它。

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

4

1 回答 1

3

您应该使用以下样式重新加载。

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

http://docs.python.org/2/library/functions.html#reload

如果一个模块使用 from ... import ... 从另一个模块导入对象,则为另一个模块调用 reload() 不会重新定义从它导入的对象 - 解决此问题的一种方法是重新执行 from 语句,另一种是改为使用导入和限定名称(module.name

更新

isinstance(x, mymodule.MYCLASS)将是False,因为类被重新初始化,但x.__class__仍引用旧类。

>>> isinstance(x, mymodule.MYCLASS)
False
>>> isinstance(y, mymodule.MYCLASS)
True
于 2013-06-21T10:22:37.740 回答