Приведи пример использования dependency injection для подмены реализации

Python Middle Без компании
Приведи пример использования dependency injection для подмены реализации
Ответы
Dependency injection (DI) позволяет легко подменять реализации зависимостей, что особенно полезно для тестирования. Вот пример: ``` from abc import ABC, abstractmethod class Logger(ABC): @abstractmethod def log(self, message: str) -> None: pass class ConsoleLogger(Logger): def log(self, message: str) -> None: print(message) class Service: def __init__(self, logger: Logger): self.logger = logger def do_work(self): self.logger.log("Working...") # В продакшене используем ConsoleLogger service = Service(ConsoleLogger()) service.do_work() # Выведет "Working..." # В тестах можно подменить на mock class MockLogger(Logger): def log(self, message: str) -> None: self.last_log = message mock_logger = MockLogger() test_service = Service(mock_logger) test_service.do_work() assert mock_logger.last_log == "Working..." ``` Ключевые моменты: - Зависимость (Logger) определена через абстракцию (ABC) - Реализация передается извне через конструктор - Можно легко подменять реализации без изменения кода Service