Что такое полиморфизм в Python? Полиморфизм, объясненный примерами

Опубликовано: 2021-03-05

Оглавление

Введение

Python — это интерпретируемый язык программирования высокого уровня с открытым исходным кодом. Он привлек большое внимание многих программистов и разработчиков, потому что он поддерживает библиотеки, которые помогают во многих задачах, таких как исследовательский анализ данных, программирование с графическим интерфейсом и т. Д. Кроме того, программирование на python очень интересно.

В этой статье мы собираемся обсудить интересную особенность Python. Итак, приступим!

Что такое Полиморфизм?

Слово «полиморфизм» происходит от греческого слова «поли» (что означает «много») и «морфизм» (формы). Это означает, что одно имя функции или имя метода может иметь несколько форм. И это соответствует желанию избежать дублирования кода в реализации.

Но полиморфизм в питоне немного отличается от полиморфизма в других языках программирования. Такие языки программирования, как java и c++, поддерживают полиморфизм времени компиляции (перегрузка методов). При перегрузке методов несколько методов могут иметь одно и то же имя, но различаться сигнатурой параметра. Эта функция не поддерживается python. Если несколько методов имеют одну и ту же функцию, то самая новая реализация функции переопределит более раннюю реализацию функции.

Функциональный полиморфизм

Полиморфизм функций в Python можно разделить на два определяемых пользователем полиморфизма и предопределенный полиморфизм.

Мы можем реализовать определяемый пользователем полиморфизм для вызова одной и той же функции с другой сигнатурой параметра, и это можно рассматривать как небольшую компенсацию за недоступность перегрузки методов в python. Давайте рассмотрим пример кода

деф мул (а, б, с = 1 ):
вернуть а*б*с;

печать (множество ( 1 , 2 , 3 ))
печать (множество ( 1 , 2 ))

В приведенном выше коде, несмотря на то, что количество переданных параметров не равно, оба оператора печати относятся к одному и тому же методу. Во втором вызове функции параметру c присваивается значение по умолчанию, равное 1.

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

печать (длина ([ 1 , 2 , 3 , 4 ]))
распечатать (длина (( 1 , 2 , 3 , 4 )))
печать (длина ( «питон» ))
print(len({ «ключ1» : «значение1» , «ключ2» : «значение2» }))

В приведенном выше коде один и тот же метод len() используется для списка, кортежа, строки и словаря.

Оформить заказ: приложения Python в реальном мире

Перегрузка оператора

Такой оператор, как «+», можно использовать несколькими способами. Например, его можно использовать для добавления двух чисел, строк, а также списков и т. д. И вот код, демонстрирующий это.

л1=[ 1 , 2 , 3 ]
л2=[ 3 , 4 , 5 ]

п1= 2
п2= 3

s1= «привет»
s2= "там"

печать(л+л1)
печать(s1+s2)
печать(n1+n2)

Переопределение метода

Переопределение метода также считается полиморфизмом времени выполнения и поддерживается многими языками, такими как java, c++ и python.

Эта функция связана с наследованием, дочерний класс в python наследует функции-члены и переменные-члены от своего родительского класса. И если мы чувствуем, что реализация метода родительского класса не имеет значения, мы можем переопределить этот метод в дочернем классе. И изменение функций-членов в соответствии с требованием в дочернем классе называется переопределением метода.

класс two_wheeler :
дефтопливо ( самостоятельно ):
print( "двухколесному транспортному средству нужно топливо" )
Способность к защите (на себя):
print( "Велосипеды подходят максимум для 2 человек" )

класс electric_bike (двухколесный):
дефтопливо ( самостоятельно ):
print( "электровелосипеды работают от аккумулятора" )
класс бензин_байк (двухколесный):
дефтопливо ( самостоятельно ):
print( "Бензиновый мотоцикл работает на бензине" )
велосипед = двухколесный ()
ebike=электрический_велосипед()
pbike=бензин_байк()

велосипед.топливо()
велосипед.емкость()
ebike.fuel()
ebike.capacity()
pbike.fuel()
pbike.capacity()

В приведенном выше коде two_wheeler — это родительский класс, а electric_bike, Petro_bike — дочерние классы. А методы Fuel(), Capacity() наследуются дочерними классами Electric_bike и Petro_bike. Теперь мы можем обновить реализацию методов, если это необходимо, и внутри класса electric_bike мы повторно реализовали метод Fuel(), аналогичным образом повторно реализовав метод Fuel() в классе Petrol_bike.

Например, в коде ebike.fuel() выводит «электрические велосипеды работают от батареи», а pbike.fuel() выводит бензиновые велосипеды, работающие на бензине».

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

Python позволяет разным классам иметь одно и то же имя метода, и это относится к функции полиморфизма. И вызов метода основан на объекте, который мы используем для вызова метода.

классный велосипед :
дефтопливо ( самостоятельно ):
print( "Велосипеду не нужно топливо!" )
Способность к защите (на себя):
print( "Велосипед подходит для езды в одиночку" )

класс электрический_байк :
дефтопливо ( самостоятельно ):
print( "электровелосипеды работают от аккумулятора" )
Способность к защите (на себя):
print( "электровелосипеды подходят максимум для 2 человек" )

класс бензин_байк :
дефтопливо ( самостоятельно ):
print( "Бензиновый мотоцикл работает на бензине" )
Способность к защите (на себя):
print( "бензиновые велосипеды подходят для максимум 2 человек" )

экобайк=велосипед()
ebike=электрический_велосипед()
pbike=бензин_байк()
l=[экобайк,ебайк,пбайк]

для объекта в л:
объект.топливо()
объект.емкость()

В приведенном выше коде мы создали три объекта трех классов: велосипед, электрический_велосипед и бензиновый_велосипед. И все три класса имеют одинаковые имена методов. Теперь задача компилятора — решить, какой метод следует вызывать, исходя из типа объекта, используемого для вызова метода.

Например, ecobike.fuel() вызовет метод Fuel() класса велосипеда, а ebike.fuel() вызовет метод Fuel() класса electric_bike. Мы добавляем все эти объекты в список, и на каждой итерации мы будем вызывать одни и те же имена функций, но тип объекта, который вызывает метод, будет меняться. В первой итерации вызываются методы класса bike, а в дальнейших итерациях – методы electric_bike, Petro_bike.

Читайте: Идеи и темы проекта Python

Заключение

В этой статье мы поняли, что означает полиморфизм, обсудили, чем отличается python в случае перегрузки методов. Прошел демонстрацию различных возможностей полиморфизма в Python, таких как перегрузка операторов, полиморфизм функций, переопределение методов и полиморфизм в методах класса.

Теперь, когда вы знаете о полиморфизме в Python, реализуйте свой следующий код на Python, используя все эти функции!

Если вам интересно узнать о науке о данных, ознакомьтесь с дипломом IIIT-B & upGrad PG в области науки о данных, который создан для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1- on-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.

Подготовьтесь к карьере будущего

ОБНОВЛЕНИЕ И ДИПЛОМ IIIT-BANGALORE PG В НАУКЕ ДАННЫХ
ЗАРЕГИСТРИРОВАТЬСЯ СЕЙЧАС @ ОБНОВЛЕНИЕ