Могли бы вы привести пример реализации принципа инверсии зависимостей в коде?

Принцип инверсии зависимостей (Dependency Inversion Principle) говорит, что высокоуровневые модули не должны зависеть от низкоуровневых, оба должны зависеть от абстракций (например, интерфейсов или абстрактных классов).

Короткий ответ

Что ответить на собеседовании

Принцип инверсии зависимостей (Dependency Inversion Principle) говорит, что высокоуровневые модули не должны зависеть от низкоуровневых, оба должны зависеть от абстракций (например, интерфейсов или абстрактных классов). В Python это можно реализовать через передачу зависимостей через конструктор или методы (dependency injection).

Подробный разбор

Ответ с пояснениями

Принцип инверсии зависимостей (Dependency Inversion Principle) говорит, что высокоуровневые модули не должны зависеть от низкоуровневых, оба должны зависеть от абстракций (например, интерфейсов или абстрактных классов). В Python это можно реализовать через передачу зависимостей через конструктор или методы (dependency injection).

Пример:

from abc import ABC, abstractmethod

class Database(ABC):
    @abstractmethod
    def save(self, data):
        pass

class MySQLDatabase(Database):
    def save(self, data):
        print(f"Сохраняем {data} в MySQL")

class UserService:
    def __init__(self, db: Database):
        self.db = db

    def create_user(self, user_data):
        # бизнес-логика
        self.db.save(user_data)

# Использование
mysql_db = MySQLDatabase()
service = UserService(mysql_db)
service.create_user({'name': 'Иван'})

Здесь UserService зависит не от конкретной реализации базы, а от абстракции Database. Это облегчает замену реализации и тестирование.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее