Polimorfizmas „Python“ (su pavyzdžiais)

Šioje pamokoje sužinosime apie polimorfizmą, įvairius polimorfizmo tipus ir tai, kaip mes galime juos įgyvendinti „Python“ pavyzdžių pagalba.

Kas yra polimorfizmas?

Tiesioginė polimorfizmo reikšmė yra įvairių formų atsiradimo sąlyga.

Polimorfizmas yra labai svarbi programavimo sąvoka. Tai reiškia vieno tipo objekto (metodo, operatoriaus ar objekto) naudojimą skirtingų tipų atvaizdavimui skirtinguose scenarijuose.

Paimkime pavyzdį:

1 pavyzdys: papildomo operatoriaus polimorfizmas

Mes žinome, kad +operatorius yra plačiai naudojamas „Python“ programose. Bet jis neturi vieno naudojimo.

Visų skaičių duomenų tipams +operatorius naudojamas atlikti aritmetinę pridėjimo operaciją.

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

Taigi pirmiau minėti programos rezultatai 3.

Panašiai, styginių duomenų tipams +operatorius naudojamas susiejimui atlikti.

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

Dėl to aukščiau nurodyta programa pateikia „Python“ programavimą.

Čia galime pamatyti, kad vienas operatorius +buvo naudojamas atlikti skirtingas skirtingų tipų duomenų operacijas. Tai yra vienas paprasčiausių „Python“ polimorfizmo atvejų.

Funkcijos polimorfizmas „Python“

Yra keletas „Python“ funkcijų, kurios yra suderinamos paleisti su keliais duomenų tipais.

Viena iš tokių funkcijų yra len()funkcija. „Python“ gali veikti su daugybe duomenų tipų. Pažvelkime į keletą funkcijų naudojimo atvejų pavyzdžių.

2 pavyzdys: Polimorfinė len () funkcija

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

Rezultatas

 9 3 2 

Čia galime pamatyti, kad daugelis duomenų tipų, tokių kaip eilutė, sąrašas, paketas, rinkinys ir žodynas, gali veikti su len()funkcija. Tačiau galime pastebėti, kad jis pateikia konkrečią informaciją apie konkrečius duomenų tipus.

„Python“ funkcijos „len ()“ polimorfizmas

Klasės polimorfizmas „Python“

Polimorfizmas yra labai svarbi į objektą orientuoto programavimo sąvoka.

Norėdami sužinoti daugiau apie OOP „Python“, apsilankykite: „Python Object-Oriented Programming“

Kurdami klasės metodus galime naudoti polimorfizmo sąvoką, nes „Python“ leidžia skirtingoms klasėms turėti metodus tuo pačiu pavadinimu.

Vėliau galime apibendrinti šių metodų iškvietimą neatsižvelgdami į objektą, su kuriuo dirbame. Pažvelkime į pavyzdį:

3 pavyzdys: polimorfizmas klasių metoduose

 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() 

Rezultatas

Miau, aš esu katė. Mano vardas Kitty. Man 2,5 metų. Miau žievė Aš esu šuo. Mano vardas Pūkuotas. Man 4 metai. Žievė

Čia mes sukūrėme dvi klases Catir Dog. Jie turi panašią struktūrą ir turi tuos pačius metodų pavadinimus info()ir make_sound().

Tačiau atkreipkite dėmesį, kad mes nesame sukūrę bendros superklasės ar kaip nors susieję klases. Net ir tada mes galime supakuoti šiuos du skirtingus objektus į porą ir kartoti per jį naudodami bendrą gyvūnų kintamąjį. Tai įmanoma dėl polimorfizmo.

Polimorfizmas ir paveldėjimas

Kaip ir kitomis programavimo kalbomis, „Python“ vaikų klasės taip pat paveldi metodus ir atributus iš tėvų klasės. Mes galime iš naujo apibrėžti tam tikrus metodus ir atributus, kad tiktų vaikų klasei, o tai vadinama metodo viršijimu .

Polimorfizmas leidžia mums pasiekti šiuos nepaisomus metodus ir atributus, kurie turi tą patį pavadinimą kaip ir tėvų klasė.

Pažvelkime į pavyzdį:

4 pavyzdys: metodo nepaisymas

 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()) 

Rezultatas

Apskritimas Aš esu dvimatis pavidalas. Kvadratų kampas lygus 90 laipsnių. 153.93804002589985

Čia galime pamatyti, kad tokie metodai __str__(), kurie nebuvo paminėti vaikų klasėse, yra naudojami iš tėvų klasės.

Dėl polimorfizmo Python vertėjas automatiškai atpažįsta, kad fact()objekto metodas a(kvadrato klasė) yra nepaisomas. Taigi, jis naudoja tą, kuris apibrėžtas vaikų klasėje.

Kita vertus, kadangi fact()objekto b metodas nėra nepaisomas, jis naudojamas klasėje „Tėvų forma“.

Polimorfizmas tėvų ir vaikų klasėse „Python“

Pastaba : Metodo perkrova - būdas sukurti kelis metodus tuo pačiu pavadinimu, bet skirtingais argumentais, „Python“ neįmanoma.

Įdomios straipsniai...