Python

Polümorfism Pythonis

Polümorfism Pythonis
Polümorfism tähendab “palju vorme.”Polümorfism on objektipõhise programmeerimise (OOP) oluline tunnusjoon.  Kui sama meetodit deklareeritakse mitu korda, mitmel eesmärgil ja erinevates klassides, siis nimetatakse seda polümorfismiks. Teine OOP omadus on pärand, mille kaudu saab lapseklassi luua vanemateklassi tunnuste pärimise teel. Mõnikord nõuab see programmeerijalt erinevatel eesmärkidel nii vanema- kui ka lapseklassides samanimelise meetodi deklareerimist. Seda tüüpi ülesandeid saab rakendada ka polümorfismi abil. Selles artiklis selgitatakse, kuidas polümorfismi saab defineerida objektorienteeritud programmeerimisel (OOP).

Näide 1: Polümorfism koos funktsioonide ja objektidega

Järgmine skript näitab polümorfismi kasutamist kahe erineva klassi vahel. Nende klasside objekti loomiseks kasutatakse funktsiooni. Nimetatud muutuja väärtus värv on initsialiseeritud __selles__() meetod niiPapagoi' ja 'Jaanalind'klassid objekti loomise ajal. The Funktsioonid() meetod on määratletud mõlemas klassis, kuid meetodi väljund iga klassi jaoks on veidi erinev. The Loo_objekt () funktsiooni kasutatakse klassi objekti loomiseks. Seda funktsiooni täidetakse kaks korda, et luua objekt 'Papagoi'klass ja'Jaanalind'klass. Mõlemad kutsuvad mõlema klassi meetodit features () ja printivad väljundi.

#!/ usr / bin / env python3
# Määratlege papagoi klass
klass Papagoi ():
def __init __ (ise, värv):
ise.värv = värv
def funktsioonid (ise):
print ("Papagoi värv on% s"% ise.värv)
print ("Papagoi võib lennata")
# Määratlege jaanalinnuklass
jaanalind ():
def __init __ (ise, värv):
ise.värv = värv
def funktsioonid (ise):
print ("Jaanalinnu värv on% s"% ise.värv)
print ("Jaanalind ei saa lennata")
# Määratlege funktsioon klassi meetodi kutsumiseks
def Loo_objekt (objekt):
Objekt.Funktsioonid()
# Loo Parrot klassi objekt
Create_Object (papagoi ('roheline'))
# Loo jaanalinnuklassi objekt
Objekti loomine_objekt (jaanalind ('must ja valge'))

Väljund

Järgmine väljund näitab, et 'Papagoi'klass on loodud'Roheline"nagu värv väärtus. Funktsioon prindib väljundi, helistades Funktsioonid() meetodPapagoi'klass. Järgmisena onJaanalind'klass on loodud'Must ja valge"nagu värv väärtus. Funktsioon prindib väljundi, helistades Funktsioonid() meetodJaanalind'klass.

Näide 2: Polümorfism seotud klassimeetodites

Nagu eelmises näites, näitab ka järgmine skript polümorfismi kasutamist kahes erinevas klassis, kuid objekti deklareerimiseks ei kasutata kohandatud funktsiooni. The __selles__() meetod niiJuhataja"ja"Ametnik'' klassid lähtestavad vajalikud muutujad. Polümorfismi rakendatakse siin, luues post_details () ja palk () meetodid mõlema klassi sees. Nende meetodite sisu on nende klasside puhul erinev. Järgmisena luuakse mõlema klassi objektimuutujad ja itereeritakse a-ga eest silmus. Igas iteratsioonis on post_details () ja palk () väljundi printimiseks kutsutakse meetodeid.

#!/ usr / bin / env python3
# Määratlege klassi nimega Manager
klassi juhataja:
def __init __ (ise, nimi, osakond):
ise.nimi = nimi
ise.post = 'Haldur'
ise.osakond = osakond
# Defineeri funktsioon üksikasjade määramiseks
def post_details (ise):
kui ise.osakond.ülemine () == 'HR':
ise.põhiline = 30000
muu:
ise.põhiline = 25000
ise.houseRent = 10000
ise.transport = 5000
print ("% s postitus on% s"% (ise.nimi, ise.postitus))
# Määratlege palga arvutamiseks funktsioon
def palk (ise):
palk = ise.põhi + mina.houseRent + ise.transport
tagastuspalk
# Määratlege Clerk nimeline klass
klassi ametnik:
def __init __ (ise, nimi):
ise.nimi = nimi
ise.post = 'ametnik'
# Defineeri funktsioon üksikasjade määramiseks
def post_details (ise):
ise.põhiline = 10000
ise.transport = 2000
print ("% s postitus on% s"% (ise.nimi, ise.postitus))
# Määratlege palga arvutamiseks funktsioon
def palk (ise):
palk = ise.põhi + mina.transport
tagastuspalk
# Looge klasside jaoks objektid
manager = Manager ("Kabir", "hr")
ametnik = ametnik ("Robin")
# Kutsuge samu funktsioone erinevatest klassidest
objektile (juhataja, ametnik):
obj.post_details ()
print ("Palk on", obj.palk ())

Väljund

Järgmine väljund näitab, et 'Sõimklassi kasutatakse esimese iteratsiooni korral eest silmus ja juhi palk trükitakse pärast arvutamist. 'Ametnikklassi kasutatakse teise iteratsiooni korral eest silmus ja ametniku palk trükitakse pärast arvutamist.

Näide 3: Polümorfism seotud klassi meetodites

Järgmine skript näitab polümorfismi kasutamist kahe lapseklassi vahel. Siin mõlemadKolmnurk"ja"Ring"on vanemklassi nimega lasteklassid"Geomeetriline_kuju.„Pärandi järgi saab lasteklass juurdepääsu kõigile vanemklassi muutujatele ja meetoditele. The __selles__() meetodGeomeetriline_kuju'klassi kasutatakse muutuja initsialiseerimiseks mõlemas lapseklassis nimi kasutades Super() meetod. Väärtused alus ja kõrgus selle 'Kolmnurk'klass lähtestatakse objekti loomise ajal. Samamoodi on 'Ring'klass lähtestatakse objekti loomise ajal. Kolmnurga pindala arvutamise valem on ½ × alus × kõrgus, mida rakendatakse ala () meetodKolmnurk'klass. Ringi ringi arvutamise valem on 3.14 × (raadius)2, mida rakendatakse ala () meetodRing'klass. Mõlema meetodi nimed on siin ühesugused, kuid eesmärk on erinev. Järgmisena võetakse kasutajalt objekti loomiseks stringi väärtus ja meetodi väljakutsumine väärtuse põhjal. Kui kasutaja sisestab 'kolmnurk', siis 'Kolmnurk luuakse klass ja kui kasutaja tippib 'ring', siis selle objekt 'Ring' klass luuakse. Kui kasutaja sisestab teksti ilma 'kolmnurga' või 'ringita', siis objekti ei looda ja prinditakse tõrketeade.

#!/ usr / bin / env python3
# Määratlege vanemklass
klass Geomeetriline_kuju:
def __init __ (ise, nimi):
ise.nimi = nimi
# Määrake kolmnurga pindala arvutamiseks lapseklass
klassi kolmnurk (geomeetriline_kuju):
def __init __ (mina, nimi, alus, kõrgus):
Super().__init __ (nimi)
ise.alus = alus
ise.kõrgus = kõrgus
def ala (ise):
tulemus = 0.5 * ise.alus * ise.kõrgus
print ("\ n% s ala =% 5.2f "% (ise.nimi, tulemus))
# Määratlege ringi pindala arvutamiseks lapseklass
klassi ring (geomeetriline_kuju):
def __init __ (ise, nimi, raadius):
Super().__init __ (nimi)
ise.raadius = raadius
def ala (ise):
tulemus = 3.14 * ise.raadius ** 2
print ("\ n% s ala =% 5.2f "% (ise.nimi, tulemus))
cal_area = input ("Millise ala soovite arvutada? kolmnurk / ring \ n ")
kui cal_area.ülemine () == 'TRIANGLE':
alus = ujuk (sisend ('Sisestage kolmnurga alus:'))
kõrgus = ujuk (sisend ('Sisestage kolmnurga kõrgus:'))
obj = kolmnurk ('kolmnurk', alus, kõrgus)
obj.ala ()
elif cal_area.ülemine () == 'RING':
raadius = ujuk (sisend ('Sisesta ringi raadius:'))
obj = ring ('ring', raadius)
obj.ala ()
muu:
print ("Vale sisend")

Väljund

Järgmises väljundis käivitatakse skript kaks korda. Esimene kord, kolmnurk võetakse sisendiks ja objekt lähtestatakse kolme väärtusega, 'Kolmnurk", alus, ja kõrgus. Seejärel kasutatakse neid väärtusi kolmnurga pindala arvutamiseks ja väljund prinditakse. Teist korda, ring võetakse sisendiks ja objekt lähtestatakse kahe väärtusega, 'Ring"ja raadius. Seejärel kasutatakse neid väärtusi ringi pindala arvutamiseks ja väljund prinditakse.

Järeldus

Selles artiklis kasutati lihtsaid näiteid, et selgitada Pythoni polümorfismi kolme erinevat kasutamist. Polümorfismi mõistet saab rakendada ka klassideta, meetodit, mida siin ei selgitata. See artikkel aitas lugejatel rohkem teada saada, kuidas rakendada polümorfismi objektorienteeritud Pythoni programmeerimisel.

Installige uusim OpenRA strateegiamäng Ubuntu Linuxi
OpenRA on tasuta / tasuta reaalajas strateegiamängumootor, mis loob uuesti Westwoodi varased mängud nagu klassikaline Command & Conquer: Red Alert. Ja...
Installige Linuxile uusim Dolphin Emulator for Gamecube & Wii
Dolphini emulaator võimaldab teil mängida valitud Gamecube & Wii mänge Linuxi personaalarvutites (PC). Vabalt saadaval oleva ja avatud lähtekoodiga m...
Kuidas kasutada GameConquerori petumootorit Linuxis
Artikkel sisaldab juhendit GameConquerori petumootori kasutamise kohta Linuxis. Paljud kasutajad, kes mängivad Windowsis mänge, kasutavad rakendust „C...