Piton

Polimorfizam u Pythonu

Polimorfizam u Pythonu
Polimorfizam znači „mnogi oblici.”Polimorfizam važna značajka objektno orijentiranog programiranja (OOP).  Kada se ista metoda deklarira više puta, u više svrha i u različitim klasama, tada se naziva polimorfizam. Još jedna značajka OOP-a je nasljedstvo, putem koje se podređena klasa može stvoriti nasljeđivanjem značajki nadređene klase. Ponekad zahtijeva od programera da deklarira istoimenu metodu u roditeljskoj i podređenoj klasi za različite svrhe. Ova vrsta zadatka također se može provesti uporabom polimorfizma. Ovaj članak objašnjava kako se polimorfizam može definirati u objektno orijentiranom programiranju (OOP).

Primjer 1: Polimorfizam sa funkcijama i objektima

Sljedeća skripta prikazuje upotrebu polimorfizma između dvije različite klase. Funkcija se koristi za stvaranje objekta tih klasa. Vrijednost imenovane varijable boja je inicijaliziran u __u tome__() metoda oba 'Papiga'i'Noj'klase u vrijeme stvaranja predmeta. The značajke () metoda definirana je u obje klase, ali je izlaz metode za svaku klasu malo drugačiji. The Create_Object () funkcija koristi se za stvaranje objekta klase. Ova se funkcija izvršava dva puta za stvaranje objekta u 'Papiga'klasa i u'Noj'razred. Svaka će pozvati metodu features () obje klase i ispisati izlaz.

#!/ usr / bin / env python3
# Definirajte klasu Parrot
razred Papagaj ():
def __init __ (self, boja):
sebe.boja = boja
def značajke (samo):
print ("Boja papagaja je% s"% samo.boja)
print ("Papiga može letjeti")
# Definirajte klasu nojeva
klasa Noj ():
def __init __ (self, boja):
sebe.boja = boja
def značajke (samo):
print ("Boja noja je% s"% samo.boja)
print ("Noj ne može letjeti")
# Definirajte funkciju za pozivanje metode klase
def Create_Object (Object):
Objekt.značajke ()
# Stvori objekt klase Parrot
Create_Object (Papiga ('Zelena'))
# Stvori objekt klase nojeva
Create_Object (Noj ('Crno i bijelo'))

Izlaz

Sljedeći izlaz pokazuje da je objekt 'Papiga'klasa je stvorena s'Zelena'kao boja vrijednost. Funkcija ispisuje izlaz pozivanjem znaka značajke () metoda 'Papiga'razred. Dalje, objekt 'Noj'klasa je stvorena s'Crno i bijelo'kao boja vrijednost. Funkcija ispisuje izlaz pozivanjem znaka značajke () metoda 'Noj'razred.

Primjer 2: Polimorfizam u nepovezanim metodama klase

Kao u prethodnom primjeru, sljedeća skripta prikazuje upotrebu polimorfizma u dvije različite klase, ali za deklariranje objekta ne koristi se prilagođena funkcija. The __u tome__() metoda oba 'Menadžer'i'Službenik'klase će inicijalizirati potrebne varijable. Polimorfizam se ovdje provodi stvaranjem post_details () i plaća() metode unutar obje klase. Sadržaj ovih metoda različit je za svaku od ovih klasa. Zatim se objektne varijable kreiraju za obje klase i ponavljaju pomoću a za petlja. U svakoj iteraciji, post_details () i plaća() pozivaju se metode za ispis rezultata.

#!/ usr / bin / env python3
# Definirajte klasu pod nazivom Manager
voditelj klase:
def __init __ (ja, ime, odjel):
sebe.ime = ime
sebe.post = 'Voditelj'
sebe.odjel = odjel
# Definirajte funkciju za postavljanje detalja
def post_details (self):
ako ja.odjel.gornja () == 'HR':
sebe.osnovno = 30000
drugo:
sebe.osnovno = 25000
sebe.najam kuće = 10000
sebe.prijevoz = 5000
print ("Post% s je% s"% (self.ime, ja.post))
# Definirajte funkciju za izračun plaće
def plaća (samo):
plaća = samo.osnovno + ja.kućaNajam + samo.prijevoz
povratna plaća
# Definirajte razred s imenom Službenik
razred Službenik:
def __init __ (ja, ime):
sebe.ime = ime
sebe.post = 'Službenik'
# Definirajte funkciju za postavljanje detalja
def post_details (self):
sebe.osnovno = 10000
sebe.prijevoz = 2000
print ("Post% s je% s"% (self.ime, ja.post))
# Definirajte funkciju za izračun plaće
def plaća (samo):
plaća = samo.osnovno + ja.prijevoz
povratna plaća
# Stvorite objekte za klase
manager = Manager ("Kabir", "hr")
službenik = službenik ("Robin")
# Pozovite iste funkcije iz različitih klasa
za obj in (upravitelj, službenik):
obj.post_details ()
print ("Plaća je", obj.plaća())

Izlaz

Sljedeći izlaz pokazuje da je objekt 'Jaslice'klasa koristi se u prvoj iteraciji za petlja i plaća menadžera ispisuje se nakon izračuna. Predmet 'Službenik'klasa koristi se u drugoj iteraciji za petlja i plaća službenika ispisuje se nakon izračuna.

Primjer 3: Polimorfizam u srodnim razrednim metodama

Sljedeća skripta prikazuje upotrebu polimorfizma između dva podređena razreda. Evo, oboje 'Trokut'i'Krug'jesu li podređene klase roditeljskog razreda'Geometrijski_oblik.'Prema nasljeđivanju, podređena klasa može pristupiti svim varijablama i metodama nadređene klase. The __u tome__() metoda 'Geometrijski_oblik'klasa se koristi u obje podređene klase za inicijalizaciju varijable Ime pomoću super() metoda. Vrijednosti baza i visina od 'Trokutklasa bit će inicijalizirana u vrijeme stvaranja objekta. Na isti način, vrijednosti radijusa 'Krugklasa bit će inicijalizirana u vrijeme stvaranja objekta. Formula za izračunavanje površine trokuta je ½ × baza × visina, koja se provodi u područje () metoda 'Trokut'razred. Formula za izračunavanje površine kruga je 3.14 × (radius)2, koja se provodi u područje () metoda 'Krug'razred. Ovdje su nazivi obje metode isti, ali svrha je različita. Dalje, od korisnika će se uzeti vrijednost niza za stvaranje objekta i za pozivanje metode koja se temelji na vrijednosti. Ako korisnik upiše "trokut", tada objekt "Trokut' klasa će se stvoriti, a ako korisnik upiše "krug", tada će se objekt 'Krug' klasa će se stvoriti. Ako korisnik upiše bilo koji tekst bez "trokuta" ili "kruga", tada se neće stvoriti objekt i ispisat će se poruka o pogrešci.

#!/ usr / bin / env python3
# Definirajte roditeljsku klasu
klasa Geometric_Shape:
def __init __ (ja, ime):
sebe.ime = ime
# Definirajte podređenu klasu za izračunavanje površine trokuta
razred Trokut (Geometric_Shape):
def __init __ (self, ime, baza, visina):
super().__init __ (ime)
sebe.baza = baza
sebe.visina = visina
def područje (samo):
rezultat = 0.5 * sebe.baza * ja.visina
print ("\ nPovršina% s =% 5.2f "% (samo.ime, rezultat))
# Definirajte podređenu klasu za izračunavanje površine kruga
razred Krug (Geometric_Shape):
def __init __ (self, name, radius):
super().__init __ (ime)
sebe.radijus = radijus
def područje (samo):
rezultat = 3.14 * sebe.polumjer ** 2
print ("\ nPovršina% s =% 5.2f "% (samo.ime, rezultat))
cal_area = input ("Koje područje želite izračunati? trokut / krug \ n ")
ako je cal_area.gornja () == 'TROKUT':
base = float (input ('Unesite bazu trokuta:'))
height = float (input ('Unesite visinu trokuta:'))
obj = Trokut ('Trokut', baza, visina)
obj.područje ()
elif cal_area.gornja () == 'KRUG':
radijus = plutajuće (ulaz ('Unesite radijus kruga:'))
obj = Krug ('Krug', radijus)
obj.područje ()
drugo:
ispis ("Pogrešan unos")

Izlaz

U sljedećem izlazu skripta se izvršava dva puta. Prvi put, trokut se uzima kao ulaz i objekt se inicijalizira s tri vrijednosti, 'Trokut', baza, i visina. Te se vrijednosti zatim koriste za izračunavanje površine trokuta i ispis će se ispisati. Drugi put, krug se uzima kao ulaz, a objekt se inicijalizira s dvije vrijednosti, 'Krug'i radius. Te se vrijednosti zatim koriste za izračunavanje površine kruga i ispis će se ispisati.

Zaključak

Ovaj je članak koristio jednostavne primjere kako bi objasnio tri različite upotrebe polimorfizma u Pythonu. Koncept polimorfizma može se primijeniti i bez klasa, metoda koja ovdje nije objašnjena. Ovaj je članak pomogao čitateljima da nauče više o tome kako primijeniti polimorfizam u objektno orijentiranom Python programiranju.

Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...
Kako prikazati OSD prekrivač u aplikacijama i igrama na cijelom zaslonu za Linux
Igranje igara preko cijelog zaslona ili upotreba aplikacija u režimu preko cijelog zaslona bez ometanja može vas odsjeći od relevantnih informacija o ...
Top 5 karata za hvatanje igara
Svi smo vidjeli i voljeli streaming reprodukcije na YouTubeu. PewDiePie, Jakesepticye i Markiplier samo su neki od najboljih igrača koji su zaradili m...