V tejto prednáške sa dozvieme o triedach, konštruktoroch a dedičnosti v pythone.
Tieto pojmy sú skutočne dôležité vo veľkom programe, kde je potrebné definovať rôzne typy.
Triedy
Triedy sú nevyhnutné pri programovaní a nie sú špecifické pre python. Mnoho ďalších programovacie jazyky podporovať pojem tried. Na definovanie nových dátových typov používame triedy.
Doteraz sme sa dozvedeli o základných dátových typoch v Pythone, ako sú čísla, reťazce a booleany. Toto sú základné alebo jednoduché dátové typy v Pythone. Tiež sme videli niekoľko zložitých dátových typov, ako sú zoznamy a slovníky.
Aj keď sú tieto typy mimoriadne užitočné, nemožno ich vždy použiť na modelovanie zložitých konceptov. Zamyslite sa napríklad nad myšlienkou bodu alebo nákupného košíka. Nákupný košík nie je logická hodnota ani zoznam. Ide o iný druh údajov. Takže môžeme použiť triedy na definovanie nových typov na modelovanie skutočných konceptov.
Teraz definujme nový dátový typ s názvom bod. Tento nový typ bude mať metódy, ktoré sme skontrolovali predtým.
Takto to urobíte:
Začneme definovaním triedy pomocou kľúčového slova „class“ a hneď potom triede pomenujeme.
class Point
Teraz sa pozrite na konvenciu pomenovania, ktorú som tu použil. Prvé písmeno som tu napísal veľké, toto nazývame pascalovou konvenciou. Táto konvencia sa líši od tej, ktorú používame na pomenovanie našich premenných a funkcií, pri ktorých vždy používame malé písmená a viaceré slová oddeľujeme podčiarkovníkom. Ale pri pomenovaní tried nepoužívame na oddelenie viacerých slov podčiarkovník, ale prvé písmeno každého slova veľké.
Po definovaní našej triedy sa použije dvojbodka, čo znamená, že teraz je definovaný blok.
class Point:
def move (self):
V tomto bloku môžeme definovať všetky funkcie alebo metódy, ktoré patria bodom. Napríklad môžeme definovať funkciu nazvanú „pohyb“ na pohyb bodu. Všimnite si, že akonáhle napíšeme otvorenú zátvorku, PyCharm sem automaticky pridá „ja“. Toto je špeciálne kľúčové slovo a dovoľte mi, aby som sa k tomu čoskoro vrátil. Vytlačíme „presunúť“ na termináli.
print("move")
Definujme inú metódu, napríklad „kresliť“ a vytlačme ju na termináli.
def draw(self):
print("draw")
S definíciou našej „bodovej“ triedy sme skončili. S týmto novým typom môžeme vytvárať nové objekty. Trieda jednoducho definuje plán alebo šablónu na vytváranie objektov, ktoré sú skutočnými inštanciami založenými na tomto návrhu. Ak chcete vytvoriť objekt, napíšeme názov našej triedy a potom ho zavoláme ako funkciu. Tým sa vytvorí nový objekt a potom sa vráti. Potom môžeme tento objekt uložiť do premennej. Ukážem ti:
Tu sme definovali „bod1“, ktorý je trojrozmerným bodom. Vidíte, že jednotlivé súradnice vieme vytlačiť na termináli.
S týmto bodom môžeme použiť dve metódy „kresliť“ a „pohybovať“.
Aby sme to zhrnuli, triedy používame na definovanie nových typov a tieto typy môžu mať metódy, ktoré definujeme v tele triedy. Triedy môžu mať atribúty, ktoré môžeme nastaviť kdekoľvek v našich programoch.
konštruktéri
Doteraz sme sa naučili vytvárať nové typy pomocou tried. Teraz je s touto implementáciou malý problém. Môžeme vytvoriť bodový objekt bez súradnice x alebo y pomocou tried a to nie je ideálne. Ukážem ti.
Vytvorte bod a vytlačte ho predtým, ako nastavíme súradnicu x. Spustenie nášho programu má za následok takúto chybu atribútu:
To znamená, že bodový objekt nemá atribút s názvom x. Teraz je problém, že je možné mať bodový objekt bez súradníc x alebo y. To nedáva zmysel, pretože vždy, keď hovoríme o bode, musíme vedieť, kde sa tento bod nachádza. Na vyriešenie tohto problému používame konštruktor. Konštruktor je funkcia, ktorá sa volá v čase vytvárania objektu.
Tu je návod, ako používame konštruktor. Najprv odovzdajme hodnoty súradníc x a y vo vyššie uvedenom programe.
point = Point(10, 20)
print(point.x)
Teraz musíme do tejto triedy pridať špeciálnu metódu nazývanú konštruktor. Jeho syntax je takáto:
def __init__(self, x, y):
init
je skratka pre inicializovaný a toto je funkcia alebo metóda, ktorá sa zavolá, keď sa vytvorí nový bodový objekt. X a y sa pridajú hneď za self
pridať dva ďalšie parametre.
Potom by sme mali namapovať x a y na odovzdané hodnoty, tj 10 a 20
self.x = x
self.y = y
Používame self
odkazovať na aktuálny objekt a potom nastavíme atribút x na argument x odovzdaný funkcii „x“. Týmto spôsobom pomocou init
môžeme inicializovať naše objekty. Táto metóda sa nazýva konštruktor. Poďme spustiť náš program.
Teraz môžeme zmeniť súradnice x a y neskôr. Aktualizujme súradnicu x:
point = Point(10, 20)
point.x = 11
print(point.x)
Teraz sa súradnica x aktualizuje na hodnotu 11.
Cvičenie
Tu je pre vás zaujímavé cvičenie.
Chcem, aby ste definovali nový typ nazývaný osoba. Tieto objekty „Osoba“ by mali mať „name
“, ako aj “talk()
“.
Je to jednoduchá úloha a nemala by trvať dlhšie ako pár minút.
Riešenie
Začnite s definovaním triedy „Person“ takto:
class Person:
self.name = name
Konštruktor definujeme neskôr. Teraz môžeme vytvoriť objekt „Person“. Nazvime to John
john = Person("John Smith")
print(john.name)
john.talk()
Teraz prejdite na prvú časť kódu a vytvorte konštruktor.
def __init__(self, name):
Konečný kód bude vyzerať takto:
V spojení s triedami a konštruktormi môžete použiť aj formátované reťazce a iné koncepty.
Dedičnosť
Dedičnosť je ďalší koncept spojený s triedami, ktoré umožňujú opätovné použitie kódu.
Zvážte tento kúsok kódu.
class Dog:
def walk(self):
print("walk")
Vytvorili sme triedu „Pes“ s metódou „prechádzky“. Pri tejto metóde jednoducho vytlačíme správu o prechádzke na termináli. Povedzme, že v skutočnom programe je namiesto jedného riadku 10 riadkov kódu. Ak v budúcnosti bude potrebná iná trieda, ktorá bude mať metódu „walk“, budeme musieť celý tento kód zopakovať. To nie je ideálne.
V programovaní máme princíp nazývaný DRY, čo je skratka pre neopakuj sa. Povedzme, že niekedy v budúcnosti objavíme problém s našou metódou „prechádzky“ a ak sme túto metódu zopakovali alebo duplikovali na mnohých iných miestach, budeme sa musieť vrátiť a vyriešiť tento problém na každom jednom mieste, kde sme ju duplikovali. kód. Preto by sme v programovaní nemali niečo definovať dvakrát.
Existujú rôzne prístupy na vyriešenie tohto problému, ale tu sa naučíme ten, ktorý je jednoduchší pre začiatočníkov a nazýva sa dedičstvo. V tomto prípade vytvoríme ďalšiu triedu „cicavec“ a v tejto triede zadefinujeme náš atribút „chôdza“.
class Mammal:
def walk(self):
print("walk")
Po definovaní našej triedy „Cicavec“ môžeme použiť dedičnosť na odovzdanie atribútov takto:
Triedy pes aj mačka dedia všetky metódy triedy definované v ich rodičovskej triede. Teraz môžeme pridať metódy špecifické pre psov, ako je tento:
class Dog:
def bark(self):
print("bark")
Zabaliť!
Toto všetko bolo o triedach, konštruktoroch a opätovnom použití kódu v triedach s pojmami dedičnosti. Teraz sa blížime ku koncu našej série. V tomto bode by ste mali byť schopní produkovať dobré, čitateľné a stručné kódy v Pythone.
Koncept modulov a balíkov uvidíme v ďalšej prednáške.
Nechaj odpoveď