在Python中,一旦我使用import X在解释器会话中导入了模块X,并且模块在外部发生了更改,我就可以使用reload(X)重新加载模块。然后这些更改在我的解释器会话中可用
我想知道,当我使用X导入Y中的从模块X导入组件Y时,这是否也是可能的
语句reload Y不起作用,因为Y本身不是模块,而只是模块内部的组件(在本例中是类)
是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的单个组件
编辑:
为了澄清,问题是从模块X导入类或函数Y,然后重新加载更改,而不是从包X加载模块Y
答复
从我的测试中,有标记的答案表明简单的重新加载(X),不起作用
据我所知,正确答案是:
importlib import reload中的
#python 2.7不需要此功能
导入X
重新加载(X)
从X导入Y
试验
我的测试如下(Python 2.6.5+bpython 0.9.5.2)
X.py:
def Y():
“打印”;测试1“;
比顿:
>&燃气轮机&燃气轮机;从X导入Y
&燃气轮机&燃气轮机&燃气轮机;打印Y()
测试1
&燃气轮机&燃气轮机>;#编辑X.py以显示“X.py”;测试2“;
&燃气轮机&燃气轮机&燃气轮机;打印Y()
测试1
&燃气轮机&燃气轮机&燃气轮机;重新加载(X)#无法工作,因为X尚未导入
回溯(最近一次呼叫最后一次):
文件"&书信电报;输入>&引用;,第1行,in<;模块>;
名称错误:未定义名称“X”
&燃气轮机&燃气轮机&燃气轮机;导入X
&燃气轮机&燃气轮机&燃气轮机;打印Y()
测试1
&燃气轮机&燃气轮机&燃气轮机;打印X.Y()
测试1
&燃气轮机&燃气轮机&燃气轮机;重新加载(X)#对上一次加载无效“;从「;声明
&燃气轮机&燃气轮机&燃气轮机;打印Y()
测试1
&燃气轮机&燃气轮机&燃气轮机;打印X.Y()#表示刷新的第一个
测试2
&燃气轮机&燃气轮机&燃气轮机;从X导入Y
&燃气轮机&燃气轮机&燃气轮机;打印Y()
测试2
&燃气轮机&燃气轮机>;#终于得到了我们想要的