NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

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:

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

 

Předchozí článek
První objektová aplikace v Pythonu - Hello object world
Všechny články v sekci
Objektově orientované programování v Pythonu
Přeskočit článek
(nedoporučujeme)
Kvíz - Úvod, objekty, třídy a metody v Pythonu
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
116 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity