Внедрение зависимостей - это паттерн, при котором зависимости объекта не создаются внутри класса, а передаются через конструктор, свойства или методы извне.

Используется в Веб-фреймоврках, тестировании, микросервисах и GUI-приложениях.

Из плюсов, этот патерн гибок, упрощает модульное тестирование, уменьшает связанности и дает возможность добавлять новые сервисы. Но требует настройка DI-контейнера, замедляет старт из-за разрешения зависимостей и из-за того что зависимости могут быть неочевидными возникает сложность отладки.

Пример плохой и хорошей зависимости: Плохая: `class UserService: def init(self): self.db = Database() # Жесткая зависимость

Хорошая: `class UserService: def init(self, db): # Зависимость внедряется извне self.db = db

#weekofpatterns``