Python

Polimorfizem v Pythonu

Polimorfizem v Pythonu
Polimorfizem pomeni "veliko oblik.”Polimorfizem pomembna značilnost objektno usmerjenega programiranja (OOP).  Ko je ista metoda razglašena večkrat, za več namenov in v različnih razredih, se imenuje polimorfizem. Druga značilnost OOP je dedovanje, prek katerega je mogoče podedovati razred dedovanja z dedovanjem lastnosti nadrejenega razreda. Včasih od programerja zahteva, da istoimensko metodo prijavi v roditeljski in podrejeni razred za različne namene. To vrsto naloge lahko izvedemo tudi z uporabo polimorfizma. Ta članek pojasnjuje, kako lahko polimorfizem definiramo v objektno usmerjenem programiranju (OOP).

Primer 1: Polimorfizem s funkcijami in predmeti

Naslednji skript prikazuje uporabo polimorfizma med dvema različnima razredoma. Funkcija se uporablja za ustvarjanje predmeta teh razredov. Vrednost imenovane spremenljivke barva je inicializiran v __v__() metoda "Papiga' in 'Noj'razredi v času ustvarjanja predmeta. The Lastnosti() metoda je definirana v obeh razredih, vendar je rezultat metode za vsak razred nekoliko drugačen. The Create_Object () funkcija se uporablja za ustvarjanje predmeta razreda. Ta funkcija se izvede dvakrat za ustvarjanje predmeta v 'Papiga'razred in v'Noj'razred. Vsak bo poklical funkcijo () obeh razredov in natisnil izhod.

#!/ usr / bin / env python3
# Določite razred Parrot
razred Parrot ():
def __init __ (self, barva):
sebe.barva = barva
def lastnosti (samo):
print ("Barva papige je% s"% samo.barva)
print ("Papiga lahko leti")
# Določite razred nojev
razred Noj ():
def __init __ (self, barva):
sebe.barva = barva
def lastnosti (samo):
print ("Barva noja je% s"% samo.barva)
print ("Noj ne more leteti")
# Določite funkcijo za klicanje metode razreda
def Create_Object (Object):
Predmet.Lastnosti()
# Ustvari objekt razreda Parrot
Create_Object (Parrot ('Green'))
# Ustvari objekt razreda nojev
Create_Object (Noj ('Črno in belo'))

Izhod

Naslednji izhod kaže, da je predmetPapiga'razred je ustvarjen z'Zelena"kot barva vrednost. Funkcija natisne izhod s klicem Lastnosti() metoda "Papiga'razred. Nato je predmet 'Noj'razred je ustvarjen z'Črno in belo"kot barva vrednost. Funkcija natisne izhod s klicem Lastnosti() metoda "Noj'razred.

Primer 2: Polimorfizem v nepovezanih metodah razredov

Tako kot v prejšnjem primeru tudi v naslednjem skriptu je prikazana uporaba polimorfizma v dveh različnih razredih, vendar za razglasitev predmeta ni uporabljena nobena funkcija. The __v__() metoda "Manager"in"Uradnik'razredi bodo inicializirali potrebne spremenljivke. Polimorfizem se tu izvaja z ustvarjanjem post_details () in plača () metode znotraj obeh razredov. Vsebina teh metod se razlikuje za vsak od teh razredov. Nato se objektne spremenljivke ustvarijo za oba razreda in ponovijo z za zanko. V vsaki ponovitvi se post_details () in plača () metode se pokličejo za izpis izhoda.

#!/ usr / bin / env python3
# Določite razred z imenom Manager
vodja predavanja:
def __init __ (jaz, ime, oddelek):
sebe.ime = ime
sebe.post = 'Upravitelj'
sebe.oddelek = oddelek
# Določite funkcijo za nastavitev podrobnosti
def post_details (self):
če jaz.oddelek.zgornji () == 'HR':
sebe.osnovno = 30000
sicer:
sebe.osnovno = 25000
sebe.houseRent = 10000
sebe.prevoz = 5000
print ("Objava% s je% s"% (self.ime, jaz.objava))
# Določite funkcijo za izračun plače
def plača (samo):
plača = samo.osnovno + jaz.houseRent + self.prevoz
povratna plača
# Določite razred z imenom Clerk
razred Uradnik:
def __init __ (jaz, ime):
sebe.ime = ime
sebe.post = 'Uradnik'
# Določite funkcijo za nastavitev podrobnosti
def post_details (self):
sebe.osnovno = 10000
sebe.prevoz = 2000
print ("Objava% s je% s"% (samo.ime, jaz.objava))
# Določite funkcijo za izračun plače
def plača (samo):
plača = samo.osnovno + jaz.prevoz
povratna plača
# Ustvarite predmete za razrede
manager = Manager ("Kabir", "hr")
referent = Uradnik ("Robin")
# Pokličite iste funkcije iz različnih razredov
za obj in (vodja, referent):
obj.post_details ()
print ("Plača je", obj.plača ())

Izhod

Naslednji izhod kaže, da je predmetJaslice'razred se uporablja v prvi ponovitvi za zanko in plača upravnika se natisne po izračunu. PredmetUradnik'razred se uporablja v drugi ponovitvi za zanko in plača referenta se natisne po izračunu.

Primer 3: Polimorfizem v sorodnih metodah razredov

Naslednji skript prikazuje uporabo polimorfizma med dvema otroškima razredoma. Tukaj, oba 'Trikotnik"in"Krog'so podrejeni razredi nadrejenega razreda z imenom'Geometric_Shape.'V skladu z dedovanjem lahko podrejeni razred dostopa do vseh spremenljivk in metod nadrejenega razreda. The __v__() metoda "Geometric_Shape'class se uporablja v obeh podrejenih razredih za inicializacijo spremenljivke ime z uporabo super () metoda. Vrednosti osnova in višina od 'Trikotnik'class bo inicializiran v času ustvarjanja predmeta. Na enak način so vrednosti polmeraKrog'class bo inicializiran v času ustvarjanja predmeta. Formula za izračun površine trikotnika je ½ × osnova × višina, ki se izvaja v območje () metoda "Trikotnik'razred. Formula za izračun površine kroga je 3.14 × (polmer)2, ki se izvaja v območje () metoda "Krog'razred. Imena obeh metod sta si tukaj enaka, namen pa je drugačen. Nato bo uporabniku vzeta vrednost niza za ustvarjanje predmeta in za klic metode na podlagi vrednosti. Če uporabnik vpiše 'trikotnik', potem je predmetTrikotnik ' razred bo ustvarjen in če uporabnik vpiše 'krog', potem bo predmet 'Krog' razred bo ustvarjen. Če uporabnik vnese katero koli besedilo brez 'trikotnika' ali 'kroga', potem ne bo ustvarjen noben objekt in natisnjeno sporočilo o napaki.

#!/ usr / bin / env python3
# Določite nadrejeni razred
razred Geometric_Shape:
def __init __ (jaz, ime):
sebe.ime = ime
# Določite podrejeni razred za izračun površine trikotnika
razred Trikotnik (Geometric_Shape):
def __init __ (self, ime, osnova, višina):
super ().__init __ (ime)
sebe.osnova = osnova
sebe.višina = višina
def območje (samo):
rezultat = 0.5 * jaz.osnova * sam.višina
print ("\ nPodročje% s =% 5.2f "% (samo.ime, rezultat))
# Določite podrejeni razred za izračun površine kroga
razred Krog (Geometric_Shape):
def __init __ (jaz, ime, polmer):
super ().__init __ (ime)
sebe.polmer = polmer
def območje (samo):
rezultat = 3.14 * jaz.polmer ** 2
print ("\ nPodročje% s =% 5.2f "% (samo.ime, rezultat))
cal_area = input ("Katero območje želite izračunati? trikotnik / krog \ n ")
če je cal_area.zgornji () == 'TRIANGLE':
base = float (input ('Vnesite osnovo trikotnika:'))
height = float (vnos ('Vnesite višino trikotnika:'))
obj = Trikotnik ('Trikotnik', osnova, višina)
obj.območje ()
elif cal_area.zgornji () == 'KROG':
radij = float (vnos ('Vnesite polmer kroga:'))
obj = krog ('krog', polmer)
obj.območje ()
sicer:
print ("Napačen vnos")

Izhod

V naslednjem izhodu se skript izvede dvakrat. Prvič, trikotnik se vzame za vhod in objekt se inicializira s tremi vrednostmi, 'Trikotnik", osnova, in višina. Te vrednosti se nato uporabijo za izračun površine trikotnika in izhod se natisne. Drugič, krog je vzet kot vhod in je objekt inicializiran z dvema vrednostma, 'Krog'in polmer. Te vrednosti se nato uporabijo za izračun površine kroga in izhod se natisne.

Zaključek

Ta članek je na enostavnih primerih razložil tri različne uporabe polimorfizma v Pythonu. Koncept polimorfizma je mogoče uporabiti tudi brez razredov, kar tukaj ni razloženo. Ta članek je bralcem pomagal izvedeti več o tem, kako uporabiti polimorfizem v objektno usmerjenem programiranju Python.

Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...
Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...