Полиморфизм проявляется при одинаковом вызове shape.area() для объектов разных классов. Конкретная реализация выбирается по объекту, а вызывающий код использует общий контракт метода.
Где проявляется полиморфизм при вызове одного метода
Полиморфизм проявляется при одинаковом вызове shape.area() для объектов разных классов. Конкретная реализация выбирается по объекту, а вызывающий код использует общий контракт метода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Python классы Square и Rectangle реализуют метод area(). Квадрат со стороной 3 и прямоугольник 2×5 находятся в одном списке. Покажите полиморфный вызов и объясните, почему для каждого элемента не нужен if по типу.
Ответ
Полиморфизм проявляется при одинаковом вызове shape.area() для объектов разных классов. Конкретная реализация выбирается по объекту, а вызывающий код использует общий контракт метода.
class Square:
def __init__(self, side):
self.side = side
def area(self):
return self.side ** 2
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
shapes = [Square(3), Rectangle(2, 5)]
assert [shape.area() for shape in shapes] == [9, 10]
Обе реализации возвращают площадь, хотя хранят разные данные. Общий базовый класс здесь не обязателен: достаточно совместимого поведения. Простое наличие двух классов ещё не демонстрирует полиморфизм; важен их взаимозаменяемый вызов через один интерфейс.