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.