:
from myModule.subModule import myClass
我正在使用myClass,并希望留在我的ipython会话中进行测试。 reload(myModule)
不会重新编译myClass。
我该怎么做?
答案 0 :(得分:2)
重新加载“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
,因为您没有引用子模块,然后您需要重复from
。
如果你接受总是导入模块的明智建议,生活就会简单得多,当然也不会从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
,那么你的生活在很多方面会更简单(更容易重装只是其中之一;-)