← Назад к вопросам

Что такое циркулярная зависимость?

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. Переструктурирование — создание третьего модуля с общей логикой.

Лучше всего проектировать архитектуру так, чтобы зависимости были однонаправленными.

Что такое циркулярная зависимость? | PrepBro