Tartalomjegyzék[Elrejt][Előadás]
Ebben az előadásban a python osztályairól, konstruktorairól és az öröklődésről fogunk tanulni.
Ezek a fogalmak nagyon fontosak egy nagy programban, ahol különböző típusokat kell meghatározni.
Osztályok
Az osztályok elengedhetetlenek a programozásban, és nem kifejezetten a pythonra vonatkoznak. Sok másik programozási nyelvek támogassák az osztályok fogalmát. Osztályokat használunk új adattípusok meghatározására.
Eddig megismertük a Python alapvető adattípusait, például a számokat, karakterláncokat és logikai értékeket. Ezek a Python alapvető vagy egyszerű adattípusai. Láttunk néhány összetett adattípust is, például listákat és szótárakat.
Bár ezek a típusok rendkívül hasznosak, nem mindig használhatók összetett fogalmak modellezésére. Gondoljon például egy pont vagy egy bevásárlókosár ötletére. A bevásárlókosár nem logikai érték vagy lista. Ez egy másfajta adat. Így osztályok segítségével új típusokat definiálhatunk valós fogalmak modellezésére.
Most határozzunk meg egy új adattípust, amit pontnak nevezünk. Ennek az új típusnak lesznek olyan metódusai, ahogy azt korábban ellenőriztük.
Így fogod csinálni:
Kezdjük azzal, hogy meghatározunk egy osztályt a „class” kulcsszó használatával, majd közvetlenül ezután adunk nevet az osztályunknak.
class Point
Most nézd meg az elnevezési konvenciót, amit itt használtam. Az első betűt nagybetűvel írtam, ezt nevezzük pascal elnevezési konvenciónak. Ez a konvenció eltér attól, amelyet a változóink és függvényeink elnevezésére használunk, amelyekhez mindig kisbetűket használunk, és több szót aláhúzással választunk el. De az osztályok elnevezésekor nem használunk aláhúzást több szó elválasztására, hanem minden szó első betűjét nagybetűvel írjuk.
Az osztályunk meghatározása után kettőspontot használunk, ami azt jelenti, hogy most egy blokk van meghatározva.
class Point:
def move (self):
Ebben a blokkban definiálhatjuk a pontokhoz tartozó összes függvényt vagy metódust. Például definiálhatunk egy „mozgatás” nevű függvényt egy pont mozgatására. Ne feledje, hogy amint beírjuk a nyitott zárójelet, a PyCharm automatikusan hozzáadja a „self” kifejezést. Ez egy speciális kulcsszó, és hadd térjek vissza erre rövidesen. Nyomtassuk ki a „mozgatás” szót a terminálra.
print("move")
Definiáljunk egy másik módszert, például a „rajzolást”, és nyomtassuk ki a terminálra.
def draw(self):
print("draw")
Elkészültünk a „pont” osztályunk meghatározásával. Ezzel az új típussal új objektumokat hozhatunk létre. Egy osztály egyszerűen meghatározza a tervrajzot vagy a sablont az objektumok létrehozásához, amelyek a terv alapján a tényleges példányok. Objektum létrehozásához írjuk be az osztályunk nevét, majd hívjuk meg, mint egy függvényt. Ez létrehoz egy új objektumot, majd visszaadja azt. Ezután az objektumot egy változóban tárolhatjuk. Hadd mutassam meg:
Itt definiáltunk egy „pont1”-et, amely egy háromdimenziós pont. Láthatja, hogy a terminálra egyedi koordinátákat nyomtathatunk.
Ezzel a ponttal a „rajzolás” és a „mozgatás” módszerét használhatjuk.
Összefoglalva tehát, osztályokat használunk új típusok meghatározására, és ezeknek a típusoknak lehetnek metódusai, amelyeket az osztály törzsében definiálunk. Az osztályoknak lehetnek attribútumai, amelyeket a programjainkban bárhol beállíthatunk.
Kivitelezők
Eddig megtanultuk, hogyan lehet új típusokat létrehozni osztályok segítségével. Most van egy kis probléma ezzel a megvalósítással. Osztályok segítségével létrehozhatunk egy pontobjektumot x vagy y koordináta nélkül, és ez nem ideális. Hadd mutassam meg.
Hozzunk létre egy pontot, és nyomtassuk ki, mielőtt beállítjuk az x koordinátát. A programunk futtatása a következőhöz hasonló attribútumhibát eredményez:
Ez azt jelenti, hogy a pontobjektumnak nincs x nevű attribútuma. Most az a probléma, hogy lehetséges egy pontobjektum x vagy y koordináták nélkül. Ennek nincs értelme, hiszen amikor egy pontról beszélünk, tudnunk kell, hol található az a pont. A probléma megoldására konstruktort használunk. A konstruktor egy függvény, amelyet az objektum létrehozásakor hívunk meg.
Így használjuk a konstruktort. Először is adjuk át az x és y koordináta értékeket a fenti programban.
point = Point(10, 20)
print(point.x)
Most egy speciális metódust kell hozzáadnunk ehhez az osztályhoz, amelyet konstruktornak neveznek. A szintaxisa a következő:
def __init__(self, x, y):
init
az inicializált szó rövidítése, és ez az a függvény vagy metódus, amely egy új pontobjektum létrehozásakor hívódik meg. Az x és az y közvetlenül ezután jön össze self
két extra paraméter hozzáadásához.
Ezt követően leképezzük az x-et és az y-t az átadott értékekre, azaz 10-re és 20-ra
self.x = x
self.y = y
Az általunk használt self
az aktuális objektumra hivatkozni, majd beállítjuk az x attribútumot az „x” függvénynek átadott x argumentumra. Ily módon, felhasználva init
módszerrel inicializálhatjuk objektumainkat. Ezt a módszert konstruktornak nevezik. Futtassuk a programunkat.
Most később megváltoztathatjuk az x és y koordinátákat. Frissítsük az x koordinátát:
point = Point(10, 20)
point.x = 11
print(point.x)
Most az x koordináta 11-re frissül.
Gyakorol
Íme egy érdekes gyakorlat az Ön számára.
Azt akarom, hogy határozzon meg egy új típust, amelyet személynek neveznek. Ezeknek a „személy” objektumoknak egy „name
" attribútum, valamint egy "talk()
”Módszer.
Ez egy egyszerű feladat, és nem tarthat tovább néhány percnél.
Megoldás
Kezdje a „Személy” osztály meghatározásával, így:
class Person:
self.name = name
A konstruktort később definiáljuk. Most létrehozhatjuk a „Személy” objektumot. Nevezzük Johnnak
john = Person("John Smith")
print(john.name)
john.talk()
Most lépjen tovább a kód első részéhez, és hozzon létre egy konstruktort.
def __init__(self, name):
A végső kód így fog kinézni:
A formázott karakterláncokat és egyéb fogalmakat osztályokkal és konstruktorokkal együtt is használhatja.
Öröklés
Az öröklődés egy másik fogalom, amely olyan osztályokhoz kapcsolódik, amelyek lehetővé teszik a kód újrafelhasználását.
Fontolja meg ezt a kódrészletet.
class Dog:
def walk(self):
print("walk")
Létrehoztunk egy „Kutya” osztályt „séta” módszerrel. Ennél a módszernél egyszerűen kinyomtatjuk a sétaüzenetet a terminálon. Tegyük fel, hogy egy valós programban 10 sor kód van itt egyetlen sor helyett. A jövőben, ha egy másik osztályra lesz szükség a „walk” metódus használatához, meg kell ismételnünk ezt a kódot. Ez nem ideális.
A programozásban van egy DRY elve, ami a ne ismételd magad rövidítése. Tegyük fel, hogy valamikor a jövőben felfedezünk egy problémát a „séta” módszerünkkel, és ha sok más helyen megismételtük vagy megismételtük ezt a módszert, akkor vissza kell térnünk és ki kell javítanunk a problémát minden olyan helyen, ahol ezt megismételtük. kód. Ezért a programozásban nem szabad valamit kétszer meghatározni.
Különböző megközelítések léteznek a probléma orvoslására, de itt azt fogjuk megtanulni, amelyik a kezdők számára könnyebb, és ezt öröklődésnek nevezik. Ebben az esetben létrehozunk egy másik „emlős” osztályt, és ebben az osztályban határozzuk meg a „séta” attribútumot.
class Mammal:
def walk(self):
print("walk")
Az „emlős” osztályunk meghatározása után az öröklődést használhatjuk az attribútumok átadására, így:
Mind a kutya, mind a macska osztály örökli a szülőosztályukban meghatározott összes osztálymetódusát. Most a kutyákra jellemző módszereket adhatunk hozzá, mint például:
class Dog:
def bark(self):
print("bark")
Csomagolj!
Ez az egész az osztályokról, a konstruktorokról és a kód újrafelhasználásáról szólt az öröklési koncepciókkal rendelkező osztályokban. Most sorozatunk végéhez közeledünk. Ezen a ponton már képesnek kell lennie jó, olvasható és tömör kódok előállítására Pythonban.
A modulok és csomagok fogalmát a következő előadáson láthatjuk.
Hagy egy Válaszol