Приведи пример использования 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