Полиморфизм в Python (с примерами)

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

Полиморфизм в функции len () в Python

Полиморфизм классов в 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

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

Интересные статьи...