Piton

Polimorfizmus a Pythonban

Polimorfizmus a Pythonban
Polimorfizmus jelentése: „sokféle forma.”A polimorfizmus az objektum-orientált programozás (OOP) fontos jellemzője.  Ha ugyanazt a módszert többször deklarálják, több célból és különböző osztályokban, akkor ezt polimorfizmusnak nevezik. Az OOP másik jellemzője öröklés, amelyen keresztül a szülőosztály jellemzőinek öröklésével létrehozható a gyermekosztály. Néha megköveteli, hogy a programozó deklarálja az azonos nevű metódust mind a szülő, mind a gyermek osztályban, különböző célokra. Ez a fajta feladat polimorfizmus alkalmazásával is megvalósítható. Ez a cikk elmagyarázza, hogyan definiálható a polimorfizmus az objektum-orientált programozásban (OOP).

1. példa: Polimorfizmus függvényekkel és objektumokkal

A következő szkript a polimorfizmus használatát mutatja be két különböző osztály között. A függvény az említett osztályok objektumának létrehozására szolgál. A megnevezett változó értéke szín inicializálja a __benne__() módszer mind a 'Papagáj' és a 'Strucc'osztályok az objektum létrehozása idején. A jellemzők() A módszer mindkét osztályban meg van határozva, de a módszer kimenete az egyes osztályokhoz kissé eltér. A Objektum létrehozása () függvény az osztály objektumának létrehozására szolgál. Ezt a függvényt kétszer hajtják végre, hogy létrehozzák az objektumot a 'Papagáj'osztály és a'Strucc' osztály. Mindegyik meghívja az osztályok () metódusát és kinyomtatja a kimenetet.

#!/ usr / bin / env python3
# Határozza meg a Papagáj osztályt
papagáj osztály ():
def __init __ (ön, szín):
maga.szín = szín
def jellemzők (én):
print ("A papagáj színe% s"% self.szín)
nyomtatás ("A papagáj repülhet")
# Határozza meg a strucc osztályt
strucc osztály ():
def __init __ (ön, szín):
maga.szín = szín
def jellemzők (én):
print ("A strucc színe% s"% self.szín)
nyomtatás ("A strucc nem tud repülni")
# Határozza meg az osztály metódusának meghívására szolgáló függvényt
def Create_Object (objektum):
Tárgy.jellemzők()
# Parrot osztály objektum létrehozása
Create_Object (Papagáj ('Zöld'))
# Strucc osztályú objektum létrehozása
Objektum létrehozása (strucc ('fekete-fehér'))

Kimenet

A következő kimenet azt mutatja, hogy a 'Papagáj'osztály létrehozva'Zöldmint az szín érték. A függvény kinyomtatja a kimenetet a jellemzők() a 'módszerPapagáj' osztály. Ezután a 'Strucc'osztály létrehozva'Fekete és fehérmint az szín érték. A függvény kinyomtatja a kimenetet a jellemzők() a 'módszerStrucc' osztály.

2. példa: Polimorfizmus nem kapcsolódó osztálymódszerekben

Az előző példához hasonlóan a következő szkript is bemutatja a polimorfizmus használatát két különböző osztályban, de az objektum deklarálásához nem használunk egyedi függvényt. A __benne__() módszer mind a 'Menedzser"és"Hivatalnok'osztályok inicializálják a szükséges változókat. A polimorfizmus itt valósul meg a post_details () és fizetés() módszerek mindkét osztályban. E módszerek tartalma ezen osztályok mindegyikénél eltérő. Ezután az objektumváltozókat mindkét osztály számára létrehozzák, és az a ismétli mert egy hurok. Minden iterációban a post_details () és fizetés() módszereket hívnak a kimenet kinyomtatására.

#!/ usr / bin / env python3
# Definiáljon egy Manager nevű osztályt
osztályvezető:
def __init __ (saját, név, osztály):
maga.név = név
maga.post = 'Menedzser'
maga.osztály = osztály
# Define funkció a részletek beállításához
def post_details (én):
ha önmaga.osztály.felső () == 'HR':
maga.alap = 30000
más:
maga.alap = 25000
maga.houseRent = 10000
maga.szállítás = 5000
print ("% s bejegyzése% s"% (self.név, önmaga.post))
# Definiálja a fizetést
def fizetés (saját):
fizetés = önmaga.alap + én.houseRent + self.szállítás
visszatérő fizetés
# Adjon meg egy Clerk nevű osztályt
osztály ügyintéző:
def __init __ (saját, név):
maga.név = név
maga.post = 'Jegyző'
# Define funkció a részletek beállításához
def post_details (én):
maga.alap = 10000
maga.szállítás = 2000
print ("% s bejegyzése% s"% (self.név, önmaga.post))
# Definiálja a fizetést
def fizetés (saját):
fizetés = önmaga.alap + én.szállítás
visszatérő fizetés
# Hozzon létre objektumokat az osztályokhoz
manager = menedzser ("Kabir", "hr")
hivatalnok = ügyintéző ("Robin")
# Ugyanazokat a függvényeket hívja meg a különböző osztályokból
objektumért (vezető, jegyző):
obj.post_details ()
nyomtatás ("A fizetés", obj.fizetés())

Kimenet

A következő kimenet azt mutatja, hogy a 'Jászol'osztályt használjuk a mert hurok és a vezető fizetését számítás után kinyomtatják. A 'Hivatalnok'osztályt használjuk a mert hurok és a hivatalnok fizetését számítás után kinyomtatják.

3. példa: Polimorfizmus a kapcsolódó osztályú módszerekben

A következő szkript bemutatja a polimorfizmus használatát két gyermekosztály között. Itt mindkettőHáromszög"és"Kör"a nevezett szülő osztály gyermekosztályai"Geometric_Shape.Az öröklés szerint a gyermekosztály hozzáférhet a szülőosztály összes változójához és módszeréhez. A __benne__() a 'módszerGeometric_Shape'' osztály mindkét gyermekosztályban használatos a változó inicializálásához név a szuper() módszer. A. Értékei bázis és magasság a 'Háromszög'osztály az objektum létrehozásakor inicializálódik. Ugyanígy a 'Kör'osztály az objektum létrehozásakor inicializálódik. A háromszög területének kiszámításához a képlet az ½ × bázis × magasság, amelyet a terület() a 'módszerHáromszög' osztály. A kör területének kiszámításához a képlet az 3.14 × (sugár)2, amelyet a terület() a 'módszerKör' osztály. Mindkét módszer neve azonos itt, de a cél más. Ezután egy karakterlánc értéket veszünk el a felhasználótól egy objektum létrehozásához és az eljárás alapján a módszer meghívásához. Ha a felhasználó beírja a 'háromszög' szót, akkor a 'Háromszög' osztály jön létre, és ha a felhasználó beírja a "kör" szót, akkor a 'Kör' osztály jön létre. Ha a felhasználó bármilyen szöveget beír „háromszög” vagy „kör” nélkül, akkor nem jön létre objektum, és hibaüzenetet nyomtat.

#!/ usr / bin / env python3
# Határozza meg a szülő osztályt
osztály Geometric_Shape:
def __init __ (saját, név):
maga.név = név
# Határozza meg a gyermekosztályt a háromszög területének kiszámításához
Háromszög osztály (Geometric_Shape):
def __init __ (saját, név, alap, magasság):
szuper().__init __ (név)
maga.alap = alap
maga.magasság = magasság
def terület (én):
eredmény = 0.5 * én.alap * én.magasság
print ("\ nA% s területe =% 5.2f "% (saját.név, eredmény))
# Határozza meg a gyermek osztályát a kör területének kiszámításához
osztály kör (Geometric_Shape):
def __init __ (saját, név, sugár):
szuper().__init __ (név)
maga.sugár = sugár
def terület (én):
eredmény = 3.14 * én.sugár ** 2
print ("\ nA% s területe =% 5.2f "% (saját.név, eredmény))
cal_area = input ("Melyik területet szeretné kiszámítani? háromszög / kör \ n ")
ha cal_area.felső () == 'Háromszög':
base = float (input ('Írja be a háromszög alapját:'))
magasság = úszó (input ('Adja meg a háromszög magasságát:'))
obj = Háromszög ('Háromszög', alap, magasság)
obj.terület()
elif cal_area.felső () == 'KÖR':
sugár = lebeg (bemenet ('Írja be a kör sugarát:'))
obj = Kör ('Kör', sugár)
obj.terület()
más:
nyomtatás ("Helytelen bevitel")

Kimenet

A következő kimenetben a szkript kétszer lesz végrehajtva. Első alkalommal, háromszög bemenetnek tekintjük, és az objektumot három érték inicializálja. 'Háromszög", bázis, és magasság. Ezeket az értékeket használjuk a háromszög területének kiszámításához, és a kimenetet kinyomtatjuk. Másodjára, kör bemenetnek számít, és az objektumot két érték inicializálja, 'Kör"és sugár. Ezeket az értékeket felhasználjuk a kör területének kiszámításához, és a kimenetet kinyomtatjuk.

Következtetés

Ez a cikk egyszerű példákkal magyarázta a polimorfizmus három különböző alkalmazását a Pythonban. A polimorfizmus fogalma osztályok nélkül is alkalmazható, ezt a módszert itt nem fejtjük ki. Ez a cikk segített az olvasóknak többet megtudni arról, hogyan alkalmazható a polimorfizmus az objektum-alapú Python programozásban.

Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...
HD Remastered Games for Linux, amelyeknek soha nem volt korábban Linux kiadásuk
Számos játékfejlesztő és kiadó a régi játékok HD remasterjével áll elő a franchise élettartamának meghosszabbítása érdekében. Kérjük, hogy a rajongók ...
Az AutoKey használata a Linux játékok automatizálásához
Az AutoKey egy asztali automatizáló segédprogram Linux és X11 rendszerekhez, Python 3, GTK és Qt programozással. A parancsfájlok és a MACRO funkcióina...