LSP — подкласс должен быть заменяем на родительский класс без нарушения программы. Если Bird.fly() есть, то Penguin(Bird) нарушает LSP — пингвин не летает. Решение: FlyingBird и NonFlyingBird. Признаки нарушения: isinstance проверки в клиентском коде, raise NotImplementedError в подклассе. Контракт родителя: предусловия не усиливаются, постусловия не ослабляются, инварианты сохраняются. В Python: используй Protocol вместо глубокой иерархии, composition вместо наследования. Тесты родителя должны проходить для всех подклассов.
Что такое Liskov Substitution Principle?
Senior
199 просмотровAFK Offer AI
Как устроено управление памятью в Python?