Вам необходимо повторить импорт после перезагрузки самого «подствольного» подмодуля. Например, дано:
$ 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
, ваша жизнь будет проще во многих отношениях (более простая перезагрузка - только одно из них; -).