В этом руководстве мы узнаем о полиморфизме, различных типах полиморфизма и о том, как мы можем реализовать их в Python с помощью примеров.
Что такое полиморфизм?
Буквальное значение полиморфизма - это условие возникновения в разных формах.
Полиморфизм - очень важное понятие в программировании. Это относится к использованию сущности одного типа (метода, оператора или объекта) для представления разных типов в разных сценариях.
Возьмем пример:
Пример 1: полиморфизм в операторе сложения
Мы знаем, что +
оператор широко используется в программах на Python. Но у него нет одноразового использования.
Для целочисленных типов данных +
оператор используется для выполнения операции арифметического сложения.
num1 = 1 num2 = 2 print(num1+num2)
Следовательно, вышеуказанная программа выводит 3.
Точно так же для строковых типов данных +
оператор используется для выполнения конкатенации.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
В результате приведенная выше программа выводит программирование на Python.
Здесь мы видим, что один оператор +
использовался для выполнения различных операций с разными типами данных. Это одно из самых простых проявлений полиморфизма в Python.
Полиморфизм функций в Python
В Python есть некоторые функции, которые могут работать с несколькими типами данных.
Одна из таких функций - это len()
функция. Он может работать со многими типами данных в Python. Давайте посмотрим на несколько примеров использования функции.
Пример 2: Полиморфная функция len ()
print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal")))
Вывод
9 3 2
Здесь мы видим, что с len()
функцией могут работать многие типы данных, такие как строка, список, кортеж, набор и словарь . Однако мы видим, что он возвращает конкретную информацию о конкретных типах данных.

Полиморфизм классов в Python
Полиморфизм - очень важное понятие в объектно-ориентированном программировании.
Чтобы узнать больше о ООП в Python, посетите: Python Object-Oriented Programming
Мы можем использовать концепцию полиморфизма при создании методов класса, поскольку Python позволяет разным классам иметь методы с одинаковыми именами.
Позже мы сможем обобщить вызов этих методов, не обращая внимания на объект, с которым мы работаем. Давайте посмотрим на пример:
Пример 3: Полиморфизм в методах класса
class Cat: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a cat. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Meow") class Dog: def __init__(self, name, age): self.name = name self.age = age def info(self): print(f"I am a dog. My name is (self.name). I am (self.age) years old.") def make_sound(self): print("Bark") cat1 = Cat("Kitty", 2.5) dog1 = Dog("Fluffy", 4) for animal in (cat1, dog1): animal.make_sound() animal.info() animal.make_sound()
Вывод
Мяу, я кот. Меня зовут Китти. Мне 2,5 года. Мяу Барк Я собака. Меня зовут Пушистый. Мне 4 года. Лай
Здесь мы создали два класса Cat
и Dog
. Они имеют схожую структуру и одинаковые имена методов info()
и make_sound()
.
Однако обратите внимание, что мы не создали общий суперкласс и никоим образом не связали классы вместе. Даже в этом случае мы можем упаковать эти два разных объекта в кортеж и перебирать его, используя общую переменную животного. Возможно из-за полиморфизма.
Полиморфизм и наследование
Как и в других языках программирования, дочерние классы в Python также наследуют методы и атрибуты родительского класса. Мы можем переопределить некоторые методы и атрибуты специально , чтобы соответствовать классу ребенка, который известен как метод главенствующими .
Полиморфизм позволяет нам получить доступ к этим переопределенным методам и атрибутам, которые имеют то же имя, что и родительский класс.
Давайте посмотрим на пример:
Пример 4: переопределение метода
from math import pi class Shape: def __init__(self, name): self.name = name def area(self): pass def fact(self): return "I am a two-dimensional shape." def __str__(self): return self.name class Square(Shape): def __init__(self, length): super().__init__("Square") self.length = length def area(self): return self.length**2 def fact(self): return "Squares have each angle equal to 90 degrees." class Circle(Shape): def __init__(self, radius): super().__init__("Circle") self.radius = radius def area(self): return pi*self.radius**2 a = Square(4) b = Circle(7) print(b) print(b.fact()) print(a.fact()) print(b.area())
Вывод
Круг Я двухмерная фигура. У квадратов каждый угол равен 90 градусам. 153.93804002589985
Здесь мы видим, что такие методы, как __str__()
, которые не были переопределены в дочерних классах, используются из родительского класса.
Из-за полиморфизма интерпретатор Python автоматически распознает, что fact()
метод объекта a
(класс Square) переопределяется. Итак, он использует тот, который определен в дочернем классе.
С другой стороны, поскольку fact()
метод объекта b не переопределяется, он используется из класса Parent Shape.

Примечание . Перегрузка методов , способ создания нескольких методов с одним и тем же именем, но разными аргументами, невозможна в Python.