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ā.