Во-первых, я знаю, что это было опубликовано ранее, но либо A) рекомендации не работают, либо B) рекомендуется вручную удалить модуль из пространства имен и повторно импортировать его, как обычно.
У меня есть следующая структура модуля
basedir/
pytools/
__init__.py
tools.py
setup.py
test.py
Если я нахожусь в basedir
, и импортирую pytools
и создаю объект класса testcls
. Фактические свойства класса находятся в tools.py
. testcls
имеет метод с именем testfunc
, который просто печатает AAA
прямо сейчас:
>>> import pytools
>>> test = pytools.testcls()
>>> test.testfunc()
AAA
Допустим, я изменил testfunc()
, чтобы теперь распечатать BBB
. Я делаю это и сохраняю файл. Затем я перезагружаю модуль и пытаюсь снова, он не печатает BBB
:
>>> from importlib import reload
>>> reload(pytools)
>>> test = pytools.testcls()
>>> test.testfunc()
AAA
Однако Если я выполняю точно такой же процесс, но вместо этого изменяю test.py
, импортирую этот файл как модуль, редактирую функцию внутри него и перезагружаю его, он ведет себя как ожидалось:
>>> import test
>>> testvariable = test.testcls()
>>> testvariable.testfunc2()
AAA
# Change the function here
>>> from importlib import reload
>>> reload(test)
>>> testvariable = test.testcls()
>>> testvariable.testfunc2()
BBB
Я действительно не понимаю, что происходит, и это просто очень раздражает меня в этот момент. Это также стоит мне немало времени, но сейчас я более раздражен.
Есть идеи, что происходит ??
Версия:
Python: 3.6.5
Переводчик: IPython, 6.2.1