Python

Polymorfizmus v Pythone

Polymorfizmus v Pythone
Polymorfizmus znamená „veľa podôb.„Polymorfizmus je dôležitou vlastnosťou objektovo orientovaného programovania (OOP).  Keď je rovnaká metóda deklarovaná viackrát, na viac účelov a v rôznych triedach, potom sa nazýva polymorfizmus. Ďalšou vlastnosťou OOP je dedenie, prostredníctvom ktorého je možné vytvoriť podradenú triedu dedením funkcií nadradenej triedy. Niekedy to vyžaduje, aby programátor deklaroval metódu rovnakého mena v rodičovskej aj podradenej triede na rôzne účely. Tento typ úlohy je možné implementovať aj pomocou polymorfizmu. Tento článok vysvetľuje, ako je možné definovať polymorfizmus v objektovo orientovanom programovaní (OOP).

Príklad 1: Polymorfizmus s funkciami a objektmi

Nasledujúci skript ukazuje použitie polymorfizmu medzi dvoma rôznymi triedami. Na vytvorenie objektu týchto tried sa používa funkcia. Hodnota pomenovanej premennej farba je inicializovaný v __init __ () metóda „Papagáj„a“Pštros'triedy v čase vytvárania objektu. The Vlastnosti() metóda je definovaná v oboch triedach, ale výstup metódy pre každú triedu je trochu odlišný. The Create_Object () funkcia sa používa na vytvorenie objektu triedy. Táto funkcia sa vykoná dvakrát, aby sa vytvoril objekt v 'Papagáj„trieda a“Pštros' trieda. Každá zavolá metódu features () oboch tried a vytlačí výstup.

#!/ usr / bin / env python3
# Definujte triedu Papagáj
trieda Papagáj ():
def __init __ (vlastné, farebné):
ja.farba = farba
základné funkcie (vlastné):
print ("Farba papagája je% s"% vlastná.farba)
tlač („Papagáj môže lietať“)
# Definujte triedu Pštros
trieda Pštros ():
def __init __ (vlastné, farebné):
ja.farba = farba
základné funkcie (vlastné):
print ("Farba Pštrosa je% s"% vlastná.farba)
tlač („Pštros nemôže lietať“)
# Definujte funkciu volania metódy triedy
def Create_Object (objekt):
Objekt.Vlastnosti()
# Vytvorte objekt triedy Parrot
Create_Object (Parrot ('Green'))
# Vytvorte objekt triedy Pštros
Create_Object (Ostrich ('Black and White'))

Výkon

Nasledujúci výstup ukazuje, že objekt 'Papagáj„trieda je vytvorená pomocou“zelená„ako farba hodnotu. Funkcia vytlačí výstup vyvolaním znaku Vlastnosti() metóda „Papagáj' trieda. Ďalej je predmetom „Pštros„trieda je vytvorená pomocou“Čierna a biela„ako farba hodnotu. Funkcia vytlačí výstup vyvolaním znaku Vlastnosti() metóda „Pštros' trieda.

Príklad 2: Polymorfizmus v metódach nesúvisiacich tried

Rovnako ako v predchádzajúcom príklade, aj nasledujúci skript ukazuje použitie polymorfizmu v dvoch rôznych triedach, ale na vyhlásenie objektu sa nepoužíva žiadna vlastná funkcia. The __init __ () metóda „Manažér„a“Úradník'triedy inicializujú potrebné premenné. Polymorfizmus sa tu implementuje vytvorením post_details () a plat () metódy vo vnútri oboch tried. Obsah týchto metód je pre každú z týchto tried odlišný. Ďalej sa objektové premenné vytvoria pre obe triedy a iterujú sa a pre slučka. V každej iterácii post_details () a plat () sa volajú metódy na tlač výstupu.

#!/ usr / bin / env python3
# Definujte triedu s názvom Manager
manažér triedy:
def __init __ (ja, meno, oddelenie):
ja.meno = meno
ja.post = 'Manažér'
ja.oddelenie = oddelenie
# Definujte funkciu pre nastavenie detailov
def post_details (self):
ak ja.oddelenie.upper () == 'HR':
ja.základná = 30000
inak:
ja.základná = 25000
ja.houseRent = 10 000
ja.doprava = 5 000
print ("Príspevok% s je% s"% (vlastný.meno, ja.príspevok))
# Definujte funkciu na výpočet platu
def plat (sám):
plat = ja.základné + vlastné.houseRent + ja.doprava
spiatočný plat
# Definujte triedu s názvom Úradník
referent triedy:
def __init __ (ja, meno):
ja.meno = meno
ja.post = 'Úradník'
# Definujte funkciu pre nastavenie detailov
def post_details (self):
ja.základná = 10 000
ja.doprava = 2000
print ("Príspevok% s je% s"% (vlastný.meno, ja.príspevok))
# Definujte funkciu na výpočet platu
def plat (sám):
plat = ja.základné + vlastné.doprava
spiatočný plat
# Vytvorte objekty pre triedy
manažér = manažér ("Kabir", "hr")
referent = úradník („Robin“)
# Zavolajte rovnaké funkcie z rôznych tried
pre obj (manažér, referent):
obj.post_details ()
tlač („Plat je“, obj.plat ())

Výkon

Nasledujúci výstup ukazuje, že objekt 'Manger"trieda sa používa pri prvej iterácii súboru pre slučka a po výpočte sa vytlačí plat manažéra. Predmet „Úradníktrieda "sa používa v druhej iterácii pre slučka a po výpočte sa vytlačí plat referenta.

Príklad 3: Polymorfizmus v metódach príbuzných tried

Nasledujúci skript ukazuje použitie polymorfizmu medzi dvoma podradenými triedami. Tu obajaTrojuholník„a“Kruh„sú podradené triedy nadradenej triedy s názvom“Geometrický_tvar.„Podľa dedičstva má podradená trieda prístup ku všetkým premenným a metódam nadradenej triedy. The __init __ () metóda „Geometrický_tvar'trieda sa používa v oboch podradených triedach na inicializáciu premennej názov pomocou Super() metóda. Hodnoty základňa a výška z 'Trojuholník'trieda bude inicializovaná v čase vytvárania objektu. Rovnakým spôsobom sú hodnoty polomeru „Kruh'trieda bude inicializovaná v čase vytvárania objektu. Vzorec pre výpočet plochy trojuholníka je ½ × základňa × výška, ktorý je implementovaný v oblasť () metóda „Trojuholník' trieda. Vzorec pre výpočet plochy kruhu je 3.14 × (polomer)2, ktorý je implementovaný v oblasť () metóda „Kruh' trieda. Názvy oboch metód sú tu rovnaké, ale účel je iný. Ďalej bude od používateľa odobratá reťazcová hodnota na vytvorenie objektu a na základe tejto hodnoty zavolaná metóda. Ak používateľ zadá „trojuholník“, potom objekt „Trojuholník' vytvorí sa trieda, a ak používateľ zadá „kruh“, potom objekt „Kruh“ trieda bude vytvorená. Ak užívateľ napíše akýkoľvek text bez „trojuholníka“ alebo „kruhu“, potom sa nevytvorí žiadny objekt a vytlačí sa chybové hlásenie.

#!/ usr / bin / env python3
# Definujte nadradenú triedu
trieda Geometric_Shape:
def __init __ (ja, meno):
ja.meno = meno
# Definujte podradenú triedu pre výpočet plochy trojuholníka
trieda Trojuholník (Geometric_Shape):
def __init __ (ja, meno, základňa, výška):
Super().__init __ (meno)
ja.základňa = základňa
ja.výška = výška
def area (self):
výsledok = 0.5 * ja.základňa * ja.výška
print ("\ nOblasť% s =% 5.2f "% (vlastné.meno, výsledok))
# Definujte podradenú triedu pre výpočet plochy kruhu
kruh triedy (Geometric_Shape):
def __init __ (self, name, radius):
Super().__init __ (meno)
ja.polomer = polomer
def area (self):
výsledok = 3.14 * ja.polomer ** 2
print ("\ nOblasť% s =% 5.2f "% (vlastné.meno, výsledok))
cal_area = input ("Ktorú oblasť chcete vypočítať."? trojuholník / kruh \ n ")
ak cal_area.upper () == 'TRIANGLE':
base = float (input ('Enter the base of the triangle:'))
height = float (vstup ('Zadajte výšku trojuholníka:'))
obj = Trojuholník ('Trojuholník', základňa, výška)
obj.oblasť ()
elif cal_area.upper () == 'KRUH':
radius = float (vstup ('Zadajte polomer kruhu:'))
obj = kruh ('kruh', polomer)
obj.oblasť ()
inak:
tlač ("Chybné zadanie")

Výkon

V nasledujúcom výstupe sa skript vykoná dvakrát. Prvý krát, trojuholník sa berie ako vstup a objekt sa inicializuje tromi hodnotami, 'Trojuholník„, základňa, a výška. Tieto hodnoty sa potom použijú na výpočet plochy trojuholníka a výstup sa vytlačí. Druhýkrát, kruh sa berie ako vstup a objekt sa inicializuje dvoma hodnotami, 'Kruh„a polomer. Tieto hodnoty sa potom použijú na výpočet plochy kruhu a výstup sa vytlačí.

Záver

Tento článok použil jednoduché príklady na vysvetlenie troch rôznych použití polymorfizmu v Pythone. Koncept polymorfizmu je možné uplatniť aj bez tried, čo tu nie je vysvetlené. Tento článok pomohol čitateľom dozvedieť sa viac o tom, ako aplikovať polymorfizmus v objektovo orientovanom programovaní Pythonu.

Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...
Hry Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Hranie hier na celú obrazovku alebo používanie aplikácií v režime rozptýlenia zadarmo na celú obrazovku vás môže odrezať od relevantných systémových i...
Hry Top 5 kariet na zachytávanie hier
Top 5 kariet na zachytávanie hier
Všetci sme videli a milovali streamovanie hier na YouTube. PewDiePie, Jakesepticye a Markiplier sú iba niektorí z najlepších hráčov, ktorí zarobili mi...