Sobes.tech
Назад к вопросам
Junior — Middle
52

Какими способами можно реализовать внедрение зависимостей в Python без использования контейнеров DI?

Ответ от нейросети

sobes.tech AI

В Python внедрение зависимостей (Dependency Injection, DI) можно реализовать без использования специализированных DI-контейнеров следующими способами:

  1. Внедрение через конструктор (Constructor Injection) Передача зависимостей через параметры конструктора класса.
class Service:
    def do_something(self):
        print("Service is working")

class Client:
    def __init__(self, service):
        self.service = service

    def run(self):
        self.service.do_something()

service = Service()
client = Client(service)
client.run()
  1. Внедрение через сеттеры (Setter Injection) Зависимость передается через методы установки после создания объекта.
class Client:
    def set_service(self, service):
        self.service = service

    def run(self):
        self.service.do_something()

client = Client()
client.set_service(Service())
client.run()
  1. Внедрение через параметры методов (Method Injection) Зависимость передается непосредственно в метод, где она нужна.
class Client:
    def run(self, service):
        service.do_something()

client = Client()
client.run(Service())
  1. Использование функций высшего порядка или замыканий Можно передавать зависимости как аргументы функций или использовать замыкания.

  2. Использование глобальных или модульных переменных Менее предпочтительный способ, но иногда используется для простых случаев.

Все эти способы позволяют контролировать зависимости явно, что упрощает тестирование и поддержку кода без необходимости использовать сложные DI-фреймворки.