Курс 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. Метод bool() в Python
  2. Команда %dhist — список посещенных каталогов
  3. Работа с эмодзи в Python
  4. Транспонирование матрицы в Python
  5. Капитализация строк
  6. Создание словаря с значением по умолчанию
  7. Создание Telegram-бота на Python
  8. Автоматизация с Python
  9. Получение пути к текущему скрипту с помощью os
  10. Сохранение Unicode в JSON
  11. Форматирование чисел в Python
  12. Работа с множествами в Python
  13. Класс UserDict: дополнительная функциональность
  14. Протокол управления контекстом
  15. Создание списка дат
  16. Модуль antigravity: генерация координат
  17. Основные операции с библиотекой Numpy
  18. Управление контекстом выполнения кода
  19. Метод __irshift__ для побитового сдвига вправо
  20. Оператор * в Python
  21. Операции с датами в Python
  22. Форматирование кода на Python
  23. Установка и использование Telegram API в Python
  24. Отправка POST-запроса в REST API
  25. Создание коллекций из генератора
  26. Функции all и any в Python
  27. Встраивание HTML в Jupyter Notebook
  28. Операции с массивами в NumPy
  29. Оптимизация гиперпараметров с Scikit Optimize
  30. Преобразование текста в нижний регистр
  31. Работа с индексами списков
  32. Создание словаря и множества
  33. Использование функции product
  34. Работа с пакетами
  35. Функция с *args.
  36. Удаление ключа из словаря
  37. Замер времени выполнения кода
  38. Оператор «not» в Python
  39. Идентификатор объекта в Python
  40. Разделение строки с помощью split()
  41. Установка Home Assistant
  42. Метод rsub для пользовательских чисел
  43. Итерации в Python
  44. Профилирование с cProfile
  45. TypedDict для kwargs в Python 3.12
  46. Работа с путями в Python
  47. kwargs в Python

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