Подсказки типа Python, как избежать межмодульного ада?

У нас есть два модуля 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

Или подсказка типа должна быть более абстрактной, например. 'объект'


person Jason M    schedule 23.01.2020    source источник
comment
Я думаю, у вас может быть что-то вроде if False: from .file1 import A внутри файла2. Тогда используйте будущий импорт.   -  person Alex Hall    schedule 23.01.2020