Какими способами можно внедрить зависимость одного класса в другой
Python
Middle
Без компании
Какими способами можно внедрить зависимость одного класса в другой
Ответы
В Python есть несколько способов внедрения зависимостей (Dependency Injection):
- **Через конструктор** (наиболее распространённый способ):
```
class Service:
def do_something(self):
return "Done"
class Client:
def __init__(self, service: Service):
self.service = service
def execute(self):
return self.service.do_something()
```
- **Через сеттер**:
```
class Client:
def set_service(self, service: Service):
self.service = service
```
- **Через метод** (временная инъекция):
```
class Client:
def execute(self, service: Service):
return service.do_something()
```
- **Через интерфейс/абстрактный класс** (лучшая практика):
```
from abc import ABC, abstractmethod
class IService(ABC):
@abstractmethod
def do_something(self): pass
class RealService(IService):
def do_something(self):
return "Real implementation"
```
- **Используя DI-контейнеры** (например, injector, dependency-injector):
```
from dependency_injector import containers, providers
class Container(containers.DeclarativeContainer):
service = providers.Singleton(Service)
client = providers.Factory(Client, service=service)
```