У нас есть два модуля Python3.7+ в двух деревьях папок в одном пакете Python.
Я хотел бы, чтобы оба модуля использовали подсказки типов, чтобы лучше документировать, как использовать код.
Но требуется, чтобы методы в классах обоих этих модулей использовали экземпляры классов из другого модуля, поскольку они связывают информацию друг с другом.
Если мы сделаем это, мы хотим написать что-то вроде этого.
В модуле1/file1.py:
class A(Base1):
def x(self, inst : B)
self.b = inst
do_stuff_with(self.b)
В модуле2/file2.py
class B(Base2):
def y(self, inst : A):
self.a = inst
do_stuff_with(self.a)
Это означает, что для работы подсказок типов оба модуля должны импортировать друг друга. И это ломает вещи.
Как правильно использовать подсказки типов, когда типы определены в другом модуле, без фактического импорта этого модуля?
Или в этой структуре невозможны подсказки типов?
Еще немного информации:
Я вижу, что есть typing.forwardRef (но там сказано не использовать его)
И в соответствии с PEP563 вы можете использовать отложенную оценку аннотаций.
from __future__ import annotations
Или подсказка типа должна быть более абстрактной, например. 'объект'
if False: from .file1 import A
внутри файла2. Тогда используйте будущий импорт. - person Alex Hall   schedule 23.01.2020