Что такое полиморфизм в Python и как он проявляется

Ответ

Полиморфизм — это принцип ООП, который позволяет использовать единый интерфейс для объектов разных классов. В Python он ярко проявляется благодаря "утиной типизации" (duck typing) и перегрузке операторов.

1. Утиная типизация (Duck Typing)

Основная идея: "Если это выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, и есть утка". Тип объекта не важен, важно лишь наличие у него необходимых методов или атрибутов.

Встроенная функция len() — отличный пример. Она работает с любым объектом, у которого есть метод __len__():

print(len("hello"))      # 5 (строка)
print(len([1, 2, 3]))   # 3 (список)
print(len({"a": 1, "b": 2})) # 2 (словарь)

2. Перегрузка операторов (Operator Overloading)

Это позволяет классам определять собственное поведение для стандартных операторов, таких как +, -, *.

Например, оператор + работает по-разному для чисел, строк и списков. Мы можем определить его и для нашего класса, реализовав "магический" метод __add__().

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    # Определяем поведение для оператора +
    def __add__(self, other):
        if isinstance(other, Vector):
            return Vector(self.x + other.x, self.y + other.y)
        raise TypeError("Unsupported operand type for +")

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(1, 2)
v2 = Vector(3, 4)

# Наш класс теперь поддерживает операцию сложения
result = v1 + v2 
print(result)  # Вывод: Vector(4, 6)