Курс Python → Принципы LSP и ISP в Python

Принцип подстановки Лискова (LSP) является одним из принципов объектно-ориентированного программирования, который утверждает, что объекты должны быть заменяемыми своими подтипами без измены свойств программы. Другими словами, подклассы должны быть взаимозаменяемы с их суперклассами без нарушения целостности программы. Например, если у нас есть класс «Самолет» и класс «Машина», то класс «Самолет» должен дополнять функциональность класса «Машина», а не заменять ее.

Принцип разделения интерфейса (ISP) предполагает, что интерфейсы не должны быть слишком объемными и должны разделяться на более мелкие части, чтобы клиенты могли реализовывать только те методы, которые им действительно нужны. В Python это может быть не так заметно из-за его динамической типизации и гибкости, но знание этого принципа всегда полезно для улучшения структуры кода. Правильное разделение интерфейсов способствует улучшению расширяемости и оптимизации программы.

Пример использования принципа подстановки Лискова в Python:


class Vehicle:
    def drive(self):
        pass

class Car(Vehicle):
    def drive(self):
        print("Driving a car")

class Airplane(Vehicle):
    def drive(self):
        print("Flying an airplane")

def travel(vehicle):
    vehicle.drive()

car = Car()
airplane = Airplane()

travel(car)
travel(airplane)

Пример использования принципа разделения интерфейса в Python:


class Printer:
    def print(self, document):
        pass

class Scanner:
    def scan(self, document):
        pass

class MultiFunctionDevice(Printer, Scanner):
    def print(self, document):
        print("Printing document")

    def scan(self, document):
        print("Scanning document")

device = MultiFunctionDevice()
device.print("Test document")
device.scan("Test document")

В обоих примерах мы видим, как применение принципов LSP и ISP помогает создавать более гибкие и расширяемые программы, которые легче поддерживать и изменять в будущем.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Объединение списков с помощью zip
  2. Базовые объекты Python
  3. Очистка данных с помощью pandas
  4. Обновление ключей в Python
  5. Частичное совпадение пользовательского ввода в Python 3.10
  6. Прокачанный трейсинг ошибок
  7. Выражения-генераторы в Python
  8. Зарезервированные слова в Python
  9. Выход из профиля в Django
  10. Импорт модулей в Python 3.12
  11. Функция all() в Python
  12. Работа с модулем bisect
  13. Протокол управления контекстом
  14. Создание словарей в Python
  15. Форматирование строк в Python
  16. Преобразование кортежа в словарь.
  17. Модуль functools в Python
  18. Аннотации типов в Python
  19. Получение текущего времени в Python
  20. Избегание циклических зависимостей классов в Python
  21. Проверка версии Python
  22. Перетасовка списков в Python
  23. Создание GUI на Tkinter
  24. Метод difference_update() — разность множеств
  25. Инверсия списка и строки
  26. Работа с комплексными числами
  27. Замена подстроки
  28. Сортировка и обратный порядок
  29. Поиск индекса элемента
  30. Работа с CSV в Python
  31. Расширение операции побитового «и» в Python
  32. Сравнение def и lambda в Python
  33. Считывание бинарного файла в Python
  34. Запрос DELETE с библиотекой requests
  35. Удаление дубликатов из списка с помощью dict.fromkeys
  36. UserString в Python
  37. Склеивание строк через метод join()
  38. Функция format() в Python
  39. Генераторы данных
  40. Функции map, filter, reduce
  41. Объединение словарей в Python
  42. Метод __call__ в Python
  43. Сортировка в Python
  44. Объединение списков в Python
  45. Работа с комплексными числами

Marketello читают маркетологи из крутых компаний