Это означает, что одна и та же сущность (операция, функция, метод, объект) может использоваться для разных типов. Это делает программирование более интуитивным и простым.

Полиморфизм в операциях

Например магический метод add реалзиован и для чисел и для строк. И вызывая его мы можем скаладывать и то и другое используя интуитивно понятный оператор +

num1 = 1
num2 = 2
print(num1 + num2)

# Подобным образом оператор + для строк используется для конкатенации.

str1 = "Give me "
str2 = "Five"
print(str1+str2)

Полиморфные функции

Когда мы можем использовать функцию len для разных типов данных и для всех них она будет одинакового интуитивно считать длину объекта

print(len("Fizz Buzz"))
print(len([1, 2, 3]))
print(len({"Name": "John", "Address": "UK"}))

Различные типы данных, такие как строка, список, кортеж, множество и словарь могут работать с функцией len() . Однако, она возвращает специфичную для каждого типа данных информацию.

Полиморфизм в методах класса

Здесь мы создали два класса Cat и Dog. У них похожая структура и они имеют методы с одними и теми же именами info() и make_sound().

class Cat:
    def __init__(self, name):
        self.name = name

    def info(self):
        print(f"I am a cat. My name is {self.name}.")

    def make_sound(self):
        print("Meow")

class Dog:
    def __init__(self, name):
        self.name = name

    def info(self):
        print(f"I am a dog. My name is {self.name}.")

    def make_sound(self):
        print("Bark")

cat_obj = Cat("Ren")
dog_obj = Dog("Stimpy")

for animal in (cat_obj, dog_obj):
    animal.make_sound()
    animal.info()
    animal.make_sound()