У меня есть код python, охватывающий несколько файлов, которые я упаковал для удобства, в результате получив следующие 3 файла в каталоге my_package:
__init__.py
Содержание:
from file1 import *
from file2 import *
file1.py содержание:
class Base(object):
pass
file2.py содержание:
from file1 import Base
class Derived(Base):
def __init__(self):
return super(Derived, self).__init__()
Затем я выполняю в IPython:
>>>%autoreload 2
>>>import my_package
>>>t = my_package.Derived()
Пока все хорошо. Но затем я вношу изменения в файл2.py, скажем, добавляя атрибут dummy. Теперь, когда я выполняю:
>>>t = my_package.Derived()
>>> 2 class Derived(Base):
>>> 3 def __init__(self):
>>>----> 4 return super(Derived, self).__init__()
>>> 5
>>> 6 dumm = 'asdf'
>>>
>>>TypeError: super(type, obj): obj must be an instance or subtype of type
Это не исчезнет, пока я не перезапущу консоль IPython. Почему автозагрузка не заботится об этом правильно? Все работает, если я помещаю Base и Derived в один файл модуля, а не в пакет.