Курс 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"
- Работа с контекстными переменными
- Переопределение метода len
- Объединение коллекций в Python
- Обработка исключений в Python
- Работа с множествами в Python
- Множественные конструкторы в Python
- Python Translator: создание локальных переводчиков
- Метод rename() для переименования файлов и каталогов
- Функция с *args.
- Оптимизация методов в Python 3.7
- Функция __init__ в Python
- Создание вложенного генератора
- Работа с изображениями Pillow
- Основные методы NumPy
- Оценка выражений генератора в Python
- Избегание изменяемых аргументов
- Использование подчеркивания в REPL
- Счетчик в Python: most_common()
- Удаление ресурса в Python
- Просмотр внешнего файла в Python
- Ограничение ресурсов в Python
- Метод __float__ в Python
- Ускорение обработки данных с %autoawait
- Отслеживание прогресса с tqdm
- Оператор @ для умножения матриц
- Работа с необработанными строками
- Генераторы в Python
- Создание итерируемых объектов
- Удаление символа из строки
- Виртуальные среды в Python
- Списки в Python: синтаксис представления
- Работа с утверждениями в Python
- Итераторы в Python
- Автоматизация с Python
- Работа с enumerate()
- Удаление элемента по индексу
- Печать календаря в Python
- CSV строка разделение в Python
- Установка random seed в Python
- Разделение строк в Python
- Проверка элемента в множестве.
- Пространство имен в Python
- Копирование и вставка текста в Python
- Объединение, распаковка и деструктуризация
- Проверка окончания строки с помощью str.endswith()
- Реверс строки и списка в Python.
- Профилирование с cProfile















