Python 3.x Python 3,imp.reload似乎没有任何效果
我正在修改一个模块,其中包含一个类 当我%运行另一个使用IPython中mofied类的模块时,除非重新启动IPython,否则更改似乎不会生效 我已尝试使用imp.reload,但这没有帮助。例如,我已将以下代码放在模块顶部,但它似乎没有使用我修改过的类的更新版本(big_mysql_database_getter模块中的BigMySQLDatabaseGetter)Python 3.x Python 3,imp.reload似乎没有任何效果,python-3.x,ipython,Python 3.x,Ipython,我正在修改一个模块,其中包含一个类 当我%运行另一个使用IPython中mofied类的模块时,除非重新启动IPython,否则更改似乎不会生效 我已尝试使用imp.reload,但这没有帮助。例如,我已将以下代码放在模块顶部,但它似乎没有使用我修改过的类的更新版本(big_mysql_database_getter模块中的BigMySQLDatabaseGetter) 重新加载模块不会自动更新以前创建的所有引用,它只是重新定义模块内的所有内容 所以,如果你做了如下事情: from spam i
重新加载模块不会自动更新以前创建的所有引用,它只是重新定义模块内的所有内容 所以,如果你做了如下事情:
from spam import eggs
imp.reload(spam)
print(spam.eggs is eggs)
您将得到False
,因为eggs
仍然引用旧类。同样,重新加载之前创建的实例是旧类的实例,而不是新类的实例:
import spam
e = spam.eggs()
imp.reload(spam)
print(isinstance(e, spam.eggs)) # False!
在您的情况下,您可以在重新加载模块后重新导入BigMySQLDatabaseGetter
,或者不直接导入类,只需导入模块并使用big\u mysql\u database\u getter.BigMySQLDatabaseGetter
import spam
e = spam.eggs()
imp.reload(spam)
print(isinstance(e, spam.eggs)) # False!