класс Rectangle:

Square нарушает контракт изменяемого Rectangle, если ширину и высоту прямоугольника можно менять независимо. После set_width(3), set_height(4) площадь Square будет 16, а ожидаемая для Rectangle — 12.

Короткий ответ

Что ответить на собеседовании

Square нарушает контракт изменяемого Rectangle, если ширину и высоту прямоугольника можно менять независимо. После set_width(3), set_height(4) площадь Square будет 16, а ожидаемая для Rectangle — 12.

Подробный разбор

Ответ с пояснениями

Условие

класс Rectangle: def set_width(self, width): self._width = width

def set_height(self, height):
    self._height = height

def get_area(self):
    return self._width * self._height

класс Square(Rectangle): def set_width(self, width): self._width = width self._height = width

def set_height(self, height):
    self._width = height
    self._height = height

Ответ

Square нарушает контракт изменяемого Rectangle, если ширину и высоту прямоугольника можно менять независимо. После set_width(3), set_height(4) площадь Square будет 16, а ожидаемая для Rectangle — 12.

Это классический пример нарушения принципа подстановки Лисков: математическое отношение «квадрат — прямоугольник» не гарантирует корректного наследования объектов с такими setter-методами. Можно разделить классы и дать общий интерфейс area, либо использовать неизменяемые фигуры с явными конструкторами. В представленном коде также нет инициализации размеров: get_area до setter вызовет AttributeError. Для исполняемого Python ключевое слово должно быть class, не «класс».

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее