0

我正在修改一个模块,其中包含一个类。

当我 %run 另一个使用 IPython 修改类的模块时,除非我重新启动 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)
4

1 回答 1

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

于 2013-09-19T14:09:15.073 回答