小编典典

如何在Python中重新加载模块的功能?

python

跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能?

伪代码:

from foo import bar

if foo.py has changed:
    reload bar

阅读 147

收藏
2020-12-20

共1个答案

小编典典

您想要的是可能的,但是需要重新加载两件事……首先reload(foo),但是您还必须这样做reload(baz)(假设baz是包含该from foo import bar语句的模块的名称)。

至于为什么…foo第一次加载时,将foo创建一个bar对象,其中包含一个对象。当您导入barbaz模块,它存储到一个参考bar。当reload(foo)被调用时,foo对象被消隐,并且该模块重新执行。这意味着所有foo引用仍然有效,但是bar已经创建了一个新对象…因此,已导入到某处的所有引用仍然是对
bar对象的引用。通过重新加载baz,使它重新导入新的bar


或者,您可以只import foo在模块中执行操作,并始终调用foo.bar()。这样,无论何时reload(foo),您都将获得最新的bar参考。

注意:从Python 3开始,首先需要通过导入reload函数 from importlib import reload

2020-12-20