Это означает, что одна и та же сущность (операция, функция, метод, объект) может использоваться для разных типов. Это делает программирование более интуитивным и простым.
Полиморфизм в операциях
Например магический метод 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()