我正在修改一个包含类的模块。
当我运行另一个使用来自IPython的mofified类的模块时,除非重新启动IPython,否则更改似乎不会生效。
我曾尝试使用imp.reload,但这没有帮助。例如,我将以下代码放在我的模块顶部,但它似乎没有使用我修改的类的更新版本(big_mysql_database_getter模块中的BigMySQLDatabaseGetter)
import imp
import sys
from big_mysql_database_getter import BigMySQLDatabaseGetter
module_big_mysql_database_getter = sys.modules['big_mysql_database_getter']
imp.reload(module_big_mysql_database_getter)
答案 0 :(得分:1)
重新加载模块不会自动更新之前创建的所有引用,它只是重新定义了模块中的所有内容。
所以,如果你做了类似的事情:
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_mysql_database_getter.BigMySQLDatabaseGetter
。