您想要的是可能的,但是需要重新加载两件事……首先reload(foo)
,但是您还必须这样做reload(baz)
(假设baz
是包含该from foo import bar
语句的模块的名称)。
至于为什么…foo
第一次加载时,将foo
创建一个bar
对象,其中包含一个对象。当您导入bar
到baz
模块,它存储到一个参考bar
。当reload(foo)
被调用时,foo
对象被消隐,并且该模块重新执行。这意味着所有foo
引用仍然有效,但是bar
已经创建了一个新对象…因此,已导入到某处的所有引用仍然是对旧 bar
对象的引用。通过重新加载baz
,使它重新导入新的bar
。
或者,您可以只import foo
在模块中执行操作,并始终调用foo.bar()
。这样,无论何时reload(foo)
,您都将获得最新的bar
参考。
注意:从Python 3开始,首先需要通过导入reload函数 from importlib import reload