Что такое полиморфизм в 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 часов обучения и помощи в трудоустройстве в ведущих фирмах.
