Полиморфизам у Питхону (са примерима)

У овом упутству ћемо научити о полиморфизму, различитим врстама полиморфизма и како их можемо применити у Питхону уз помоћ примера.

Шта је полиморфизам?

Дословно значење полиморфизма је услов појављивања у различитим облицима.

Полиморфизам је веома важан појам у програмирању. Односи се на употребу ентитета једног типа (метода, оператора или објекта) за представљање различитих типова у различитим сценаријима.

Узмимо пример:

Пример 1: Оператор полиморфизма сабирања

Знамо да се +оператор у великој мери користи у програмима Питхон. Али, нема ниједну употребу.

За целобројне типове података, +оператор се користи за извршавање аритметичке операције сабирања.

 num1 = 1 num2 = 2 print(num1+num2) 

Дакле, горњи програм даје резултате 3.

Слично томе, за типове података низа, +оператор се користи за извршавање спајања.

 str1 = "Python" str2 = "Programming" print(str1+" "+str2) 

Као резултат, горе наведени програм даје Питхон програмирање.

Овде можемо видети да је један оператер +коришћен за извршавање различитих операција за различите типове података. Ово је једна од најједноставнијих појава полиморфизма у Питхону.

Полиморфизам функције у Питхону

У Питхону постоје неке функције које су компатибилне за покретање са више типова података.

Једна од таквих функција је len()функција. У Питхону може да ради са многим типовима података. Погледајмо неке примере употребе функције.

Пример 2: Полиморфна функција лен ()

 print(len("Programiz")) print(len(("Python", "Java", "C"))) print(len(("Name": "John", "Address": "Nepal"))) 

Оутпут

 9 3 2 

Овде можемо видети да многи типови података као што су стринг, лист, тупле, сет и дицтионари могу да раде са len()функцијом. Међутим, можемо видети да враћа специфичне информације о одређеним типовима података.

Полиморфизам у функцији лен () у Питхону

Разред полиморфизам у Питхон-у

Полиморфизам је веома важан појам у објектно оријентисаном програмирању.

Да бисте сазнали више о ООП-у у Питхону, посетите: Питхон објектно оријентисано програмирање

Концепт полиморфизма можемо користити приликом креирања метода класа, јер Питхон омогућава да различите класе имају методе са истим именом.

Тада можемо касније генерализовати позивање ових метода занемарујући објекат са којим радимо. Погледајмо пример:

Пример 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().

Међутим, имајте на уму да нисмо створили заједничку суперкласу или повезали класе на било који начин. Чак и тада, можемо спаковати ова два различита предмета у скуп и итерирати кроз њу користећи заједничку животињску променљиву. Могуће је због полиморфизма.

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

Као и у другим програмским језицима, подређене класе у Питхону такође наслеђују методе и атрибуте од родитељске класе. Можемо редефинисати одређене методе и атрибуте посебно да одговарају подређеној класи, која је позната као Надјачавање метода .

Полиморфизам нам омогућава приступ овим замењеним методама и атрибутима који имају исто име као родитељска класа.

Погледајмо пример:

Пример 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__(), које нису замењене у подређеним разредима, користе из родитељске класе.

Због полиморфизма, Питхон тумач аутоматски препознаје да је fact()метода за објекат a(класа Скуаре) поништена. Дакле, користи ону дефинисану у класи дете.

С друге стране, с обзиром да fact()метода за објекат б није замењена, користи се из класе Родитељски облик.

Полиморфизам у разредима родитеља и детета у Питхон-у

Напомена : Преоптерећење метода , начин стварања више метода са истим именом, али различитим аргументима, у Питхону није могуће.

Занимљиви Чланци...