在Python中,一旦我使用import X
在解释器会话中导入了一个模块X,并且该模块在外部发生了更改,我就可以使用reload(X)
重新加载该模块。然后,这些更改将在我的翻译会话中可用。
我想知道当我使用from X import Y
从模块X导入组件Y时,这是否也可能。
语句reload Y
不起作用,因为Y不是模块本身,而是模块内部的组件(在本例中是类)。
不离开解释器会话(或导入整个模块)就可以重新加载模块的各个组件吗?
编辑:
为了澄清,问题是从模块X导入类或函数Y,并在更改时重新加载,而不是从包X重新加载模块Y
Tags:
如果Y是一个模块(X是一个包)
reload(Y)
就没问题了——否则,你就会明白为什么好的Python风格的指南(比如我的雇主的指南)说,除了模块之外,永远不要导入任何东西,不管我怎么解释这不是个好主意。回答
从我的测试中。有标记的答案表示简单的
reload(X)
,但不起作用。据我所知,正确答案是:
测试
我的测试如下(Python 2.6.5+bpython 0.9.5.2)
X.py公司:
布莱顿:
首先,如果可以避免的话,根本不应该使用reload。但我们假设您有自己的理由(即在空闲状态下进行调试)。
重新加载库不会将名称返回到模块的命名空间中。为此,只需重新分配变量:
你可以用其他的方法。您可以通过搜索本地名称空间,并重新分配所讨论模块中的任何内容来自动化该过程,但我认为我们已经够邪恶了。
相关问题 更多 >
编程相关推荐