Как в питоне реализуется инверсия зависимостей?

Рейтинг: 0Ответов: 0Опубликовано: 03.06.2023

Обычно в качестве объяснения говорят, что надо реализовывать абстрактные классы - от них наследоваться, а в самом объекте принимать те типы, которые реализуют этот интерфейс, что-то вроде такого:

# Абстрактный класс для работы с базой данных
class Database(ABC):
    @abstractmethod
    def connect(self):
        pass
    
    @abstractmethod
    def execute(self, query):
        pass


# Класс, который зависит от абстракции (Database)
class UserManager:
    def __init__(self, database: Database):
        self.db = database
        
    def get_users(self):
        query = "SELECT * FROM users"
        return self.db.execute(query)

Но ведь в Python типизация только на уровне соглашения, поэтому нам ничего не помешает передать в качестве аргумента database в UserManager то, что не реализует интерфейс Database, тогда в чем состоит зависимость?

Ответы

Ответов пока нет.