Встречается на собеседованиях • сегодня
Как будешь внедрять зависимости без DI в Python
В Python можно внедрять зависимости без использования DI-фреймворков несколькими способами:
- Через аргументы конструктора (наиболее Pythonic-способ):
python
class Database:
def query(self, sql): ...
class UserService:
def __init__(self, db: Database):
self.db = db
db = Database()
service = UserService(db)- Через сеттеры (менее предпочтительно):
python
class UserService:
def set_db(self, db: Database):
self.db = db- Через фабричные функции:
python
def create_user_service(db: Database) -> UserService:
return UserService(db)- Используя контекстные менеджеры для временных зависимостей:
python
with Database() as db:
service = UserService(db)Ключевые принципы:
- Явное лучше неявного
- Зависимости должны передаваться явно
- Избегать глобальных состояний и синглтонов
- Предпочитать композицию наследованию
Для сложных проектов лучше использовать DI-контейнеры (injector, dependency-injector), но для большинства случаев хватает простой передачи через конструктор.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы