← Назад к вопросам
Что такое циркулярная зависимость?
2.0 Middle🔥 191 комментариев
#DevOps и инфраструктура#Django
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Циркулярная зависимость
Циркулярная зависимость (circular dependency) — это ситуация, когда два или более модуля или класса зависят друг от друга, создавая круговую цепь импортов. Это ведёт к ошибкам импорта и усложняет архитектуру кода.
Примеры проблемы
# module_a.py
from module_b import ClassB
class ClassA:
def method(self):
return ClassB()
# module_b.py
from module_a import ClassA
class ClassB:
def method(self):
return ClassA()
Попытка импортировать любой модуль вызовет ImportError.
Решения
1. Отложенный импорт:
class ClassA:
def method(self):
from module_b import ClassB
return ClassB()
2. TYPE_CHECKING для типов:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from module_b import ClassB
class ClassA:
def method(self, b: "ClassB"):
return b
3. Инъекция зависимостей:
class ClassA:
def __init__(self, b):
self.b = b
4. Переструктурирование — создание третьего модуля с общей логикой.
Лучше всего проектировать архитектуру так, чтобы зависимости были однонаправленными.