2013-06-21 90 views
1

我無法弄清楚如何解決我在我的程序中使用reload時遇到的問題。 如果我的代碼就像使用reload時奇怪的Python問題

import mymodule 
from mymodule import MYCLASS 

x = MYCLASS() 

然後一切工作正常。但是,如果我嘗試像這樣重新加載模塊:

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

我得到一些奇怪的錯誤。我明白,也許是因爲MYCLASSmymodule的參考號已經改變,但無法準確理解爲什麼以及如何防止它。

在這種情況下重新加載導入的模塊和類的正確方法是什麼?

+1

確切的錯誤是什麼? –

回答

3

您應該按照以下樣式使用重新加載。

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

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

如果一個模塊進口...進口 使用......,呼籲其他模塊重裝()不會重新定義從中導入 對象從另一個模塊對象 - 一種解決方法是從聲明中重新執行 ,另一種方法是使用導入和限定名稱 (模塊。名稱)。

UPDATE

isinstance(x, mymodule.MYCLASS)False,作爲類被重新初始化,但仍x.__class__引用舊的階級。

>>> isinstance(x, mymodule.MYCLASS) 
False 
>>> isinstance(y, mymodule.MYCLASS) 
True 
+1

+1。值得一提的是,在完成這樣的事情之後,'isinstance(x,mymodule.MYCLASS)'將會是'False',因爲類將被重新初始化,但是'x .__ class__'仍然會引用舊的類。 – mata

+0

@mata,謝謝你的建議,我更新了答案。 – falsetru