Python

Polimorfisms Pitonā

Polimorfisms Pitonā
Polimorfisms nozīmē “daudzas formas.”Polimorfisms ir svarīga objektorientētās programmēšanas (OOP) iezīme.  Kad viena un tā pati metode tiek deklarēta vairākas reizes, vairākiem mērķiem un dažādās klasēs, tad to sauc par polimorfismu. Vēl viena OOP iezīme ir mantojums, caur kuru var izveidot bērnu klasi, mantojot vecāku klases pazīmes. Dažreiz tas prasa, lai programmētājs dažādiem mērķiem deklarētu tā paša nosaukuma metodi gan vecāku, gan bērnu klasēs. Šāda veida uzdevumus var īstenot arī, izmantojot polimorfismu. Šajā rakstā ir paskaidrots, kā polimorfismu var definēt objektorientētā programmēšanā (OOP).

1. piemērs: polimorfisms ar funkcijām un objektiem

Šis skripts parāda polimorfisma izmantošanu starp divām dažādām klasēm. Funkcija tiek izmantota, lai izveidotu šo klašu objektu. Nosauktā mainīgā vērtība krāsa tiek inicializēts __tajā__() metode ganPapagailis"un"Strauss'klases objekta izveidošanas laikā. The Iespējas() metode ir definēta abās klasēs, bet katras klases metodes iznākums ir nedaudz atšķirīgs. The Izveidot_objektu () Funkcija tiek izmantota, lai izveidotu klases objektu. Šī funkcija tiek izpildīta divas reizes, lai izveidotu objektu 'Papagailis"klase un"Strauss'klase. Katrs izsauks abu klašu metodi () un izdrukās izdruku.

#!/ usr / bin / env python3
# Definējiet papagaiļu klasi
klases papagailis ():
def __init __ (pats, krāsa):
pats.krāsa = krāsa
def funkcijas (pats):
drukāt ("Papagaiļa krāsa ir% s"%.krāsa)
drukāt ("Papagailis var lidot")
# Definējiet strausu klasi
strausa klase ():
def __init __ (pats, krāsa):
pats.krāsa = krāsa
def funkcijas (pats):
drukāt ("Strausu krāsa ir% s"%.krāsa)
drukāt ("Strauss nevar lidot")
# Definējiet funkciju, lai izsauktu klases metodi
def Izveidot_objektu (objekts):
Objekts.Iespējas()
# Izveidot Parrot klases objektu
Izveidot_objektu (papagailis ('zaļš'))
# Izveidot strausa klases objektu
Izveidot_objektu (strauss ('melnbaltais'))

Rezultāts

Šī izeja parāda, ka 'Papagailis'klase ir izveidota ar'Zaļš"kā krāsa vērtība. Funkcija izdrukā izvadi, izsaucot Iespējas() metodePapagailis'klase. Pēc tam 'Strauss'klase ir izveidota ar'Melns un balts"kā krāsa vērtība. Funkcija izdrukā izvadi, izsaucot Iespējas() metodeStrauss'klase.

2. piemērs: polimorfisms nesaistītās klases metodēs

Tāpat kā iepriekšējā piemērā, arī šajā skriptā tiek parādīta polimorfisma izmantošana divās dažādās klasēs, taču objekta deklarēšanai netiek izmantota pielāgota funkcija. The __tajā__() metode ganVadītājs' un 'Lietvede'klases inicializēs nepieciešamos mainīgos. Polimorfisms tiek ieviests šeit, izveidojot post_details () un alga () metodes abās klasēs. Šo metožu saturs katrai no šīm klasēm ir atšķirīgs. Pēc tam objektu mainīgie tiek izveidoti abām klasēm un tiek atkārtoti ar a priekš cilpa. Katrā atkārtojumā post_details () un alga () metodes tiek izmantotas, lai izdrukātu izvadi.

#!/ usr / bin / env python3
# Definējiet klasi ar nosaukumu Manager
klases vadītājs:
def __init __ (pats, vārds, nodaļa):
pats.nosaukums = nosaukums
pats.post = 'Pārvaldnieks'
pats.nodaļa = nodaļa
# Definējiet funkciju, lai iestatītu informāciju
def post_details (pats):
ja pats.nodaļa.augšējais () == 'HR':
pats.pamata = 30000
cits:
pats.pamata = 25000
pats.houseRent = 10000
pats.transports = 5000
drukāt ("% s sūtījums ir% s"% (self.vārds, pats.pastu))
# Definējiet funkciju, lai aprēķinātu algu
def alga (pats):
alga = pats.pamata + sevis.houseRent + pats.transports
atdeves alga
# Definējiet klasi ar nosaukumu Clerk
klases lietvede:
def __init __ (pats, vārds):
pats.nosaukums = nosaukums
pats.post = 'Lietvedis'
# Definējiet funkciju, lai iestatītu informāciju
def post_details (pats):
pats.pamata = 10000
pats.transports = 2000
drukāt ("% s ziņa ir% s"% (self.vārds, pats.pastu))
# Definējiet funkciju algas aprēķināšanai
def alga (pats):
alga = pats.pamata + sevis.transports
atdeves alga
# Izveidojiet objektus klasēm
manager = vadītājs ("Kabir", "hr")
lietvedis = lietvedis ("Robin")
# Izsauciet tās pašas funkcijas no dažādām klasēm
par obj (vadītājs, lietvedis):
obj.post_details ()
drukāt ("Alga ir", obj.alga ())

Rezultāts

Šī izeja parāda, ka 'Silīte"klase tiek izmantota pirmās iterācijas versijā priekš cilpa un vadītāja alga tiek drukāta pēc aprēķināšanas. 'Lietvede"klase tiek izmantota priekš cilpa un pēc aprēķina tiek izdrukāta ierēdņa alga.

3. piemērs: polimorfisms saistīto klašu metodēs

Šis skripts parāda polimorfisma izmantošanu starp divām bērnu klasēm. Lūk, abiTrīsstūris' un 'Aplis"ir vecāku klases bērnu klases ar nosaukumu"Ģeometriskā_forma."Saskaņā ar mantojumu bērnu klase var piekļūt visiem vecāku klases mainīgajiem un metodēm. The __tajā__() metodeĢeometriskā_forma'mainīgo inicializēšanai tiek izmantota klase abās bērnu klasēs nosaukums izmantojot super () metodi. Vērtības bāze un augstums no 'Trīsstūris'klase tiks inicializēta objekta izveides laikā. Tādā pašā veidā rādiusa vērtībasAplis'klase tiks inicializēta objekta izveides laikā. Trijstūra laukuma aprēķināšanas formula ir ½ × bāze × augstums, kas tiek īstenots apgabals () metodeTrīsstūris'klase. Apļa laukuma aprēķināšanas formula ir 3.14 × (rādiuss)2, kas tiek īstenots apgabals () metodeAplis'klase. Abu metožu nosaukumi šeit ir vienādi, bet mērķis ir atšķirīgs. Pēc tam no lietotāja tiks ņemta virknes vērtība, lai izveidotu objektu un izsauktu metodi, pamatojoties uz vērtību. Ja lietotājs ieraksta “trīsstūris”, tad “Trīsstūris ' klase tiks izveidota, un, ja lietotājs ierakstīs “aplis”, tad 'Aplis' klase tiks izveidota. Ja lietotājs ievada tekstu bez “trijstūra” vai “apļa”, objekts netiks izveidots un tiks izdrukāts kļūdas ziņojums.

#!/ usr / bin / env python3
# Definējiet vecāku klasi
klase Geometric_Shape:
def __init __ (pats, vārds):
pats.nosaukums = nosaukums
# Definējiet bērnu klasi trīsstūra laukuma aprēķināšanai
klases trīsstūris (ģeometriskā_forma):
def __init __ (pats, vārds, bāze, augstums):
super ().__init __ (vārds)
pats.bāze = bāze
pats.augstums = augstums
def apgabals (pats):
rezultāts = 0.5 * pats.bāze * es.augstums
drukāt ("\ n% s apgabals =% 5.2f "% (pats.nosaukums, rezultāts))
# Definējiet bērnu klasi apļa laukuma aprēķināšanai
klases aplis (ģeometriskā_forma):
def __init __ (pats, vārds, rādiuss):
super ().__init __ (vārds)
pats.rādiuss = rādiuss
def apgabals (pats):
rezultāts = 3.14 * pats.rādiuss ** 2
drukāt ("\ n% s apgabals =% 5.2f "% (pats.nosaukums, rezultāts))
cal_area = input ("Kuru apgabalu vēlaties aprēķināt? trīsstūris / aplis \ n ")
ja cal_area.augšējais () == 'TRISSTŪRIS':
base = float (input ('Ievadiet trijstūra pamatu:'))
augstums = pludiņš (ievade ('Ievadiet trīsstūra augstumu:'))
obj = trijstūris ('trīsstūris', pamatne, augstums)
obj.apgabals ()
elif cal_area.augšējais () == 'CIRCLE':
rādiuss = pludiņš (ievade ('Ievadiet apļa rādiusu:'))
obj = aplis ('aplis', rādiuss)
obj.apgabals ()
cits:
drukāt ("Nepareiza ievade")

Rezultāts

Šajā izvadē skripts tiek izpildīts divas reizes. Pirmā reize, trīsstūris tiek uzskatīts par ievadi, un objekts tiek inicializēts ar trim vērtībām, "Trīsstūris", bāze, un augstums. Pēc tam šīs vērtības tiek izmantotas, lai aprēķinātu trijstūra laukumu, un izeja tiks izdrukāta. Otro reizi, aplis tiek ņemts par ievadi, un objekts tiek inicializēts ar divām vērtībām. 'Aplis' un rādiuss. Pēc tam šīs vērtības tiek izmantotas, lai aprēķinātu apļa laukumu, un izeja tiks izdrukāta.

Secinājums

Šajā rakstā tika izmantoti vienkārši piemēri, lai izskaidrotu trīs dažādus polimorfisma izmantošanas veidus Python. Polimorfisma jēdzienu var izmantot arī bez klasēm, metodi, kas šeit nav izskaidrota. Šis raksts palīdzēja lasītājiem uzzināt vairāk par to, kā pielietot polimorfismu objektorientētā Python programmēšanā.

HD Remastered spēles operētājsistēmai Linux, kurām nekad agrāk nebija Linux laidiena
Daudzi spēļu izstrādātāji un izdevēji nāk klajā ar veco spēļu HD remaster, lai pagarinātu franšīzes darbības laiku. Lūdzu, faniem, kas pieprasa saderī...
Kā izmantot AutoKey, lai automatizētu Linux spēles
AutoKey ir darbvirsmas automatizācijas lietderība operētājsistēmām Linux un X11, kas ieprogrammēta Python 3, GTK un Qt. Izmantojot skriptu un MACRO fu...
Kā parādīt FPS skaitītāju Linux spēlēs
Linux spēles ieguva lielu impulsu, kad Valve 2012. gadā paziņoja par Linux atbalstu Steam klientam un viņu spēlēm. Kopš tā laika daudzas AAA un indie ...