对不起,我确定这是一堆,但我找不到.
在myModule.py中:
from myModule.subModule import myClass
我正在研究myClass,并希望留在我的ipython会话中进行测试. reload(myModule)不会重新编译myClass.
我怎样才能做到这一点?
最佳答案 重新加载“leafmost”子模块后,需要重复导入.例如,给出:
$mkdir myModule
$touch myModule/__init__.py
$cat >myModule/subModule.py
class MyClass(object): kind='first'
然后
>>> from myModule.subModule import MyClass
>>> MyClass.kind
'first'
在另一个终端
$cat >myModule/subModule.py
class MyClass(object): kind='second'
然后…:
>>> import sys
>>> reload(sys.modules['myModule.subModule'])
<module 'myModule.subModule' from 'myModule/subModule.py'>
>>> from myModule.subModule import MyClass
>>> MyClass.kind
'second'
你需要通过sys.modules,因为你没有对子模块的引用,然后你需要重复从.
如果你接受总是导入模块的明智建议,那么生活就会简单得多,当然也不会从INSIDE模块中获取内容 – 例如,Python会话将是(在重新加载之前对子模块进行更改):
>>> from myModule import subModule as sm
>>> sm.MyClass.kind
'first'
>>> reload(sm)
<module 'myModule.subModule' from 'myModule/subModule.py'>
>>> sm.MyClass.kind
'second'
如果你习惯使用sm.MyClass之类的限定名称而不只是名字MyClass,那么你的生活在很多方面会更简单(更容易重新加载只是其中之一;-).