Lekce 3 - Atributy a metody v Pythonu Nové
V minulé lekci, První objektová aplikace v Pythonu - Hello object world, jsme si ukázali jak OOP funguje, vysvětlili jsme si pojmy třída a metoda. Naprogramovali jsme si naši první objektovou aplikaci.
V dnešní lekci Pythonu si uvedeme parametry metod, naučíme se používat atributy a tím dokončíme naši první objektovou aplikaci. Nakonec si ukážeme využití komentářů.
Parametry metody
Dejme nyní naší metodě pozdrav()
parametr
jmeno
, aby dokázala pozdravit konkrétního uživatele. V souboru
zdravic.py
kód takto upravme:
def pozdrav(self, jmeno): print(f"Ahoj uživateli {jmeno}")
Vidíme, že syntaxe parametru metody je stejná, jako syntaxe proměnné. Kdybychom chtěli parametrů více, oddělujeme je čárkou. Upravíme také kód pod třídou:
class Zdravic:
def pozdrav(self, jmeno):
print(f"Ahoj uživateli {jmeno}")
zdravic = Zdravic()
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")
A výsledek:
Výstup metody pozdrav():
Ahoj uživateli Karel
Ahoj uživateli Petr
Náš kód je nyní v metodě a my ho můžeme jednoduše pomocí parametrů volat znovu s různými parametry. Nemusíme 2x opisovat "Ahoj uživateli...". Jedná se o stejnou výhodu jako jsme už objevili u funkcí.
Atributy třídy
Třídě přidáme nějaký atribut. Nabízí se atribut text
,
kde bude uložen text pozdravu. Atributy se definují v prostoru třídy
stejně, jako proměnné. Jelikož atributy patří jednotlivým instancím
objektu, přistupujeme k nim přes parametr self
, kde je vždy
aktuální objekt, se kterým pracujeme. Upravme tedy naši třídu:
class Zdravic: text = "" def pozdrav(self, jmeno): print(f"{self.text} {jmeno}") zdravic = Zdravic() zdravic.pozdrav("Karel") zdravic.pozdrav("Petr")
Vidíme, že Zdravic
má nový atribut text
.
Jelikož instancí zdraviče můžeme vytvořit kolik chceme, přístup k
atributu přes self.text
zajistí, že se text vezme z té
instance, na které je metoda zavolána.
K vyzkoušení zdraviče s textem nyní chybí již jen text nastavit vytvořené instanci:
class Zdravic:
text = ""
def pozdrav(self, jmeno):
print(f"{self.text} {jmeno}")
zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")
zdravic.text = "Vítám tě tu programátore"
zdravic.pozdrav("Richard")
Výsledek:
Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr
Vítám tě tu programátore Richard
Návratová hodnota metody
Vzhledem k objektovému návrhu není nejvhodnější, aby si každý objekt ovlivňoval vstup a výstup, jak se mu zachce. Pochopitelně narážíme na naše vypisování do konzole. Každý objekt by měl mít určité kompetence, které by neměl překračovat. Pověřme náš objekt pouze sestavením pozdravu a jeho výpis si zpracujeme již mimo. Výhodou takto navrženého objektu je vysoká univerzálnost a znovupoužitelnost. Objekt doposud umí jen psát do konzole. My si jej však přizpůsobíme tak, aby daná metoda text pouze vracela. Bude pak pouze na jeho příjemci, jak s ním naloží. Takto můžeme pozdravy ukládat do souborů, psát na webové stránky nebo dále zpracovávat.
K návratu hodnoty použijeme příkaz return
. Příkaz
return
metodu ukončí a navrátí hodnotu. akýkoli kód v těle
metody po příkazu return
se již neprovede! Upravíme metodu
pozdrav()
:
def pozdrav(self, jmeno): return f"{self.text} {jmeno}"
A náš program bude nyní vypadat takto:
class Zdravic:
text = "Ahoj"
def pozdrav(self, jmeno):
return f"{self.text} {jmeno}"
zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
print(zdravic.pozdrav("Karel"))
print(zdravic.pozdrav("Petr"))
zdravic.text = "Vítám tě tu programátore"
print(zdravic.pozdrav("Richard"))
Nyní je náš kód dle dobrých praktik.
Komentáře
Ještě naši třídu okomentujme, jak se sluší a patří. Komentáře
budeme psát pod název třídy a pod název každého atributu a metody. K
jejich zápisu použijeme tři dvojité uvozovky ("""
).
Zdokumentovaná třída může vypadat např. takto:
class Zdravic: """ Třída reprezentuje zdravič, který slouží ke zdravení uživatelů. """ text = "Ahoj" """ Atribut obsahující výchozí text pozdravu. Pokud není specifikován jiný text, použije se tento výchozí text při sestavování pozdravu. """ def pozdrav(self, jmeno): """ Vrátí pozdrav uživatele s nastaveným textem a jeho jménem. Parametry: - jmeno (str): Jméno osoby, kterou chceme pozdravit. Výstup: - str: Text pozdravu s jménem osoby. """ return f"{self.text} {jmeno}"
Význam self
V Pythonu je self
jedním z klíčových konceptů v objektově
orientovaném programování a je důležité ho pochopit. Když už víme, co
je instance a jak se tvoří atributy, pojďme si jej vysvětlit jednoduše a
názorně.
Když vytváříme objekt (instanci třídy), představíme si ho jako
speciální box. Každý box (objekt) má svá vlastní data (atributy) a
nástroje, které s tímto boxem lze dělat (metody). Když chceme, aby box
(objekt) něco udělal, potřebujeme způsob, jak na tento konkrétní box
odkazovat. A právě self
je způsob, kterým toho dosáhneme.
A jsme u konce. Za úkol máte předělat si naši konzolovou kalkulačku do objektů.
V následujícím kvízu, Kvíz - Úvod, objekty, třídy a metody v Pythonu, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 51x (1.15 kB)
Aplikace je včetně zdrojových kódů v jazyce Python