Курс 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. Транспонирование матрицы
  2. Символ подчеркивания в Python
  3. Регистрация на курсы SF Education
  4. Приближение чисел в Python
  5. Работа с буфером обмена на Python
  6. Методы работы со списками
  7. Правила именования переменных
  8. Создание уникального проекта
  9. Создание вложенного генератора
  10. Генерация случайных чисел в Python
  11. Преобразование регистра символов
  12. Функция zip() в Python
  13. Проекты на Python
  14. Создание пустых функций и классов в Python
  15. Метод rsub для пользовательских чисел
  16. Изменяемые и неизменяемые объекты
  17. Копирование в Python
  18. Вакансии в Nebius
  19. Метод append() для списка
  20. Множественное присваивание в Python
  21. Работа с zip-архивами в Python
  22. Переменные в Python
  23. Проверка на палиндром
  24. Заказ карты Тинькофф Black
  25. Отладка в командной строке
  26. PrettyTable: создание таблицы
  27. Асинхронное выполнение задач в процессах
  28. Оптимизация параметров в Python
  29. List Comprehension Tutorial
  30. Работа с словарями в Python
  31. Методы __repr__ и __str__ в Python
  32. Оператор match в Python
  33. Преобразование в float
  34. Глобальные переменные в Python
  35. Создание namedtuple списком полей
  36. Срезы в Numpy
  37. Копирование списков в Python
  38. Декораторы в Python
  39. Объединение списков с помощью zip
  40. Модуль os: работа с файлами и папками
  41. Проблема с изменяемыми аргументами
  42. Обмен переменными в Jupyter
  43. Форматирование вывода с F-строками
  44. Разделение списка на гнппы
  45. Логирование в Python

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