在Python中,一旦我在解释器会话中导入了模块X,使用import X
,并且模块在外部发生变化,我可以使用以下命令重新加载模块reload(X)
。然后,这些更改将在我的口译会话中可用。
我想知道当我使用从模块 X 导入组件 Y 时这是否也可能from X import Y
.
该声明reload Y
不起作用,因为Y
本身不是一个模块,而只是模块内部的一个组件(在本例中是一个类)。
是否可以在不离开解释器会话(或导入整个模块)的情况下重新加载模块的各个组件?
为了澄清起见,问题是关于导入类或函数 Y from a module X并在更改时重新加载,而不是包 X 中的模块 Y。
Answer
根据我的测试,标记的答案表明一个简单的reload(X)
,不起作用。
据我所知,正确答案是:
from importlib import reload # python 2.7 does not require this
import X
reload( X )
from X import Y
Test
我的测试如下(Python 2.6.5 + bpython 0.9.5.2)
X.py:
def Y():
print "Test 1"
bpython:
>>> from X import Y
>>> print Y()
Test 1
>>> # Edit X.py to say "Test 2"
>>> print Y()
Test 1
>>> reload( X ) # doesn't work because X not imported yet
Traceback (most recent call last):
File "<input>", line 1, in <module>
NameError: name 'X' is not defined
>>> import X
>>> print Y()
Test 1
>>> print X.Y()
Test 1
>>> reload( X ) # No effect on previous "from" statements
>>> print Y()
Test 1
>>> print X.Y() # first one that indicates refresh
Test 2
>>> from X import Y
>>> print Y()
Test 2
>>> # Finally get what we were after
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)