Я пытаюсь понять, как использовать аннотации, особенно модуль ввода, чтобы были не циклический импорт, но я также могу четко документировать пользователей пакетов и набирать подсказки (особенно для ipython). Я чувствую, что близок к этому, но не могу точно определить лучшие практики, поэтому подумал, что лучше попросить о помощи.
Код: Выделить всё
a.pyКод: Выделить всё
class A:
#...
def to_B(self) -> B:
#...
return B(self)
if __name__ == "__main__":
a = A()
b = a.to_B()
print(b.a())
Код: Выделить всё
b.pyКод: Выделить всё
from a import A
class B:
def __init__(self, a: A) -> None:
self._a = a # Store reference
# Use properties of `a` as a spec for generating B attributes
# ...
return
def a(self) -> A:
return self._a
if __name__ == "__main__":
a = A()
b = B(a)
print(b.a())
Код: Выделить всё
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from b import B
#...
class A:
# ...
def to_B(self) -> "B":
from b import B
# ...
return B(self)
Это лучший способ обеспечить ввод подсказок между связанными модулями , а также предотвращает рекурсию импорта модулей?
Подробнее здесь: https://stackoverflow.com/questions/787 ... on-modules