Obsah[Skrýt][Ukázat]
V této přednášce se seznámíme s třídami, konstruktory a dědičností v pythonu.
Tyto pojmy jsou opravdu důležité ve velkých programech, kde je potřeba definovat různé typy.
vyučování
Třídy jsou nezbytné v programování a nejsou specifické pro python. Mnoho jiných programovací jazyky podporovat pojem tříd. Třídy používáme k definování nových datových typů.
Doposud jsme se učili o základních datových typech v Pythonu, jako jsou čísla, řetězce a booleany. Toto jsou základní nebo jednoduché datové typy v Pythonu. Také jsme viděli několik komplexních datových typů, jako jsou seznamy a slovníky.
I když jsou tyto typy extrémně užitečné, nelze je vždy použít k modelování složitých konceptů. Zamyslete se například nad myšlenkou bodu nebo nákupního košíku. Nákupní košík není logická hodnota ani seznam. Jde o jiný druh dat. Můžeme tedy použít třídy k definování nových typů pro modelování skutečných konceptů.
Nyní definujeme nový datový typ nazvaný bod. Tento nový typ bude mít metody, které jsme zkontrolovali dříve.
Takto to uděláte:
Začneme tím, že definujeme třídu pomocí klíčového slova „class“ a hned poté dáme naší třídě jméno.
class Point
Nyní se podívejte na konvenci pojmenování, kterou jsem zde použil. První písmeno jsem zde napsal velkým písmenem, tomu říkáme pascalská konvence pojmenování. Tato konvence se liší od té, kterou používáme pro pojmenování našich proměnných a funkcí, pro které vždy používáme malá písmena a oddělujeme více slov pomocí podtržítka. Ale při pojmenovávání tříd nepoužíváme k oddělení více slov podtržítko, ale první písmeno každého slova velké.
Po definování naší třídy se použije dvojtečka, což znamená, že nyní je definován blok.
class Point:
def move (self):
V tomto bloku můžeme definovat všechny funkce nebo metody, které k bodům patří. Můžeme například definovat funkci nazvanou „pohyb“ pro pohyb bodu. Všimněte si, že jakmile napíšeme otevřenou závorku, PyCharm sem automaticky přidá „self“. Toto je speciální klíčové slovo a brzy se k němu vrátím. Vytiskneme na terminálu „pohyb“.
print("move")
Pojďme definovat jinou metodu, jako je „kreslit“ a vytisknout ji na terminálu.
def draw(self):
print("draw")
S definicí naší „bodové“ třídy jsme skončili. S tímto novým typem můžeme vytvářet nové objekty. Třída jednoduše definuje plán nebo šablonu pro vytváření objektů, které jsou skutečnými instancemi založenými na tomto plánu. Chcete-li vytvořit objekt, napíšeme název naší třídy a poté jej zavoláme jako funkci. Tím se vytvoří nový objekt a poté se vrátí. Potom můžeme tento objekt uložit do proměnné. Dovol mi ukázat ti:
Zde jsme definovali „bod1“, což je trojrozměrný bod. Vidíte, že na terminálu můžeme vytisknout jednotlivé souřadnice.
S tímto bodem můžeme použít dvě metody „kreslit“ a „pohybovat“.
Abychom to zrekapitulovali, používáme třídy k definování nových typů a tyto typy mohou mít metody, které definujeme v těle třídy. Třídy mohou mít atributy, které můžeme nastavit kdekoli v našich programech.
Konstruktory
Zatím jsme se naučili vytvářet nové typy pomocí tříd. Nyní je s touto implementací malý problém. Můžeme vytvořit bodový objekt bez x nebo y souřadnice pomocí tříd a to není ideální. Dovol mi ukázat ti.
Vytvořme bod a vytiskneme jej, než nastavíme souřadnici x. Spuštění našeho programu má za následek chybu atributu, jako je tato:
To znamená, že bodový objekt nemá žádný atribut s názvem x. Nyní je problém, že je možné mít bodový objekt bez souřadnic x nebo y. To nedává smysl, protože kdykoli mluvíme o bodu, musíme vědět, kde se tento bod nachází. K vyřešení tohoto problému používáme konstruktor. Konstruktor je funkce, která se volá při vytváření objektu.
Zde je návod, jak používáme konstruktor. Nejprve předáme hodnoty souřadnic x a y ve výše uvedeném programu.
point = Point(10, 20)
print(point.x)
Nyní musíme do této třídy přidat speciální metodu nazvanou konstruktor. Jeho syntaxe je tato:
def __init__(self, x, y):
init
je zkratka pro initialized a toto je funkce nebo metoda, která se volá, když je vytvořen nový bodový objekt. X a y jsou přidány hned za self
přidat dva parametry navíc.
Poté bychom měli namapovat x a y na předané hodnoty, tj. 10 a 20
self.x = x
self.y = y
Používáme self
odkazovat na aktuální objekt a poté nastavíme atribut x na argument x předaný funkci „x“. Tímto způsobem pomocí init
můžeme inicializovat naše objekty. Tato metoda se nazývá konstruktor. Spusťte náš program.
Nyní můžeme změnit souřadnice x a y později. Aktualizujeme souřadnice x:
point = Point(10, 20)
point.x = 11
print(point.x)
Nyní je souřadnice x aktualizována na hodnotu 11.
Uplatňovat
Zde je pro vás zajímavé cvičení.
Chci, abyste definovali nový typ zvaný osoba. Tyto objekty „Osoba“ by měly mít „name
“atribut a také “talk()
„Metoda.
Je to jednoduchý úkol a neměl by trvat déle než pár minut.
Řešení
Začněte definováním třídy „Person“ takto:
class Person:
self.name = name
Konstruktor definujeme později. Nyní můžeme vytvořit objekt „Person“. Říkejme tomu John
john = Person("John Smith")
print(john.name)
john.talk()
Nyní přejděte k první části kódu a vytvořte konstruktor.
def __init__(self, name):
Konečný kód bude vypadat takto:
Můžete také použít formátované řetězce a další koncepty ve spojení s třídami a konstruktory.
Dědictví
Dědičnost je další koncept spojený s třídami, které umožňují opětovné použití kódu.
Zvažte tento kus kódu.
class Dog:
def walk(self):
print("walk")
Vytvořili jsme třídu „Pes“ s metodou „procházka“. V této metodě jednoduše vytiskneme zprávu o procházce na terminálu. Řekněme, že ve skutečném programu je zde 10 řádků kódu místo pouze jednoho řádku. Pokud v budoucnu bude potřeba jiná třída, aby měla metodu „walk“, budeme muset celý tento kód zopakovat. To není ideální.
V programování máme princip zvaný DRY, což je zkratka pro neopakuj se. Řekněme, že někdy v budoucnu objevíme problém s naší metodou „procházky“, a pokud jsme tuto metodu opakovali nebo duplikovali na mnoha jiných místech, budeme se muset vrátit a opravit tento problém na každém jednotlivém místě, kde jsme ji duplikovali. kód. Proto bychom v programování neměli něco definovat dvakrát.
Existují různé přístupy k nápravě tohoto problému, ale zde se naučíme ten, který je pro začátečníky jednodušší a nazývá se dědičnost. V tomto případě vytvoříme další třídu „savec“ a v této třídě definujeme náš atribut „chodit“.
class Mammal:
def walk(self):
print("walk")
Po definování naší třídy „Savec“ můžeme použít dědičnost k předání atributů takto:
Třídy pes i kočka dědí všechny metody tříd definované ve své nadřazené třídě. Nyní můžeme přidat metody specifické pro psy, jako je tento:
class Dog:
def bark(self):
print("bark")
Zabalit!
To vše bylo o třídách, konstruktorech a opětovném použití kódu ve třídách s koncepty dědičnosti. Nyní se blížíme ke konci naší série. V tomto okamžiku byste měli být schopni produkovat dobré, čitelné a stručné kódy v Pythonu.
Koncept modulů a balíčků uvidíme v další přednášce.
Napsat komentář