Sobes.tech
Back to questions
Junior — Middle
51

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

Answer from AI

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-фреймворки.