Встречается на собеседованиях • сегодня

Как будешь внедрять зависимости без DI в Python

В Python можно внедрять зависимости без использования DI-фреймворков несколькими способами:

  1. Через аргументы конструктора (наиболее Pythonic-способ):
python
class Database:
    def query(self, sql): ...

class UserService:
    def __init__(self, db: Database):
        self.db = db

db = Database()
service = UserService(db)
  1. Через сеттеры (менее предпочтительно):
python
class UserService:
    def set_db(self, db: Database):
        self.db = db
  1. Через фабричные функции:
python
def create_user_service(db: Database) -> UserService:
    return UserService(db)
  1. Используя контекстные менеджеры для временных зависимостей:
python
with Database() as db:
    service = UserService(db)

Ключевые принципы:

  • Явное лучше неявного
  • Зависимости должны передаваться явно
  • Избегать глобальных состояний и синглтонов
  • Предпочитать композицию наследованию

Для сложных проектов лучше использовать DI-контейнеры (injector, dependency-injector), но для большинства случаев хватает простой передачи через конструктор.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы