Пишу на python 3.5, пробую пользовать типизацию, но столкнулся с проблемой циклического импортирования - стало сложно разбивать программу на модули.
Одна из проблем отношение одни_к_одному:
# модуль 1
from mod1 import B
class A:
def __init__(self):
self.__B = B(self)
# модуль 2
from mod2 import A
class B:
def __init__(self, arg: A):
self.__a = arg
Ну и так далее. Проблема серьёзно нарастает с увеличением количества модулей.
Хочу узнать это я к задаче подхожу неверно, или есть решение проблемы?
ПС: я в том смысле, что возбуждается исключение ImportError, и я не могу от него избавиться.
Ответ
PEP 484 -- Type Hints рекомендует использовать import module вместо from module import Type и задавать типы в виде строк, чтобы уменьшить последствия от круговой зависимости, вызванной использованием type hints:
# mod1.py
import mod2
class B:
def __init__(self, arg: 'mod2.A') -> None:
self.__a = arg
# mod2.py
import mod1
class A:
def __init__(self):
self.__b = mod1.B(self)
В качестве альтернативы, если классы настолько тесно связаны, можно их в один модуль поместить или выполнить другой подходящий случаю refactoring (возможно более общий тип, определённый, к примеру, в mod2.types, следует использовать в B). See Type hinting would generate a lot of import statements (possibly leading to circular imports). Use strings instead of imported names?
Комментариев нет:
Отправить комментарий