Пользуешься ли принципом инверсии зависимостей (Dependency Inversion Principle)

Python Senior Без компании
Пользуешься ли принципом инверсии зависимостей (Dependency Inversion Principle)
Ответы
Dependency Inversion Principle (DIP) — один из SOLID принципов, который гласит: - Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракций. - Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. **Пример без DIP:** ``` class LightBulb: def turn_on(self): print("LightBulb: turned on") class Switch: def __init__(self, bulb: LightBulb): self.bulb = bulb def operate(self): self.bulb.turn_on() ``` Здесь `Switch` жестко зависит от `LightBulb`. **С DIP:** ``` from abc import ABC, abstractmethod class Switchable(ABC): @abstractmethod def turn_on(self): pass class LightBulb(Switchable): def turn_on(self): print("LightBulb: turned on") class Switch: def __init__(self, device: Switchable): self.device = device def operate(self): self.device.turn_on() ``` Теперь `Switch` зависит от абстракции (`Switchable`), а не от конкретной реализации. Это упрощает расширение (например, добавление `Fan` без изменения `Switch`). Использование DIP делает код гибче, тестируемее и легче для масштабирования.