a.py:
Код: Выделить всё
class A:
def __init__(self, b):
self.b = b
def run(self):
print(self.b.get_text()) # blindly calling the function because b is not typed
Код: Выделить всё
from app.a import A
class B:
def run(self):
a = A(self)
a.run()
def get_text(self):
return "hello world"
Код: Выделить всё
from app.b import B
if __name__ == "__main__":
b = B()
b.run()
Что я пробовал:
[*]Протоколы: это работает, но приводит к большому дублированию кода,
особенно при внедрении нескольких классов.
[*]Абстрактные базовые классы (ABC): тоже работает, но если подкласс добавляет новые
свойства, проверка типов становится затруднительной, поскольку внедренный класс не может точно отражать эти свойства.
[*]
Код: Выделить всё
if TYPE_CHECKING
< /ul>
Вопрос:
Какой наиболее удобный и типобезопасный подход к внедрению зависимостей в Python, позволяющий избежать циклического импорта?
Есть ли какие-либо передовые методы или шаблоны проектирования, которые позволяют более элегантно справиться с этой ситуацией?
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/790 ... cular-impo