Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

3. diel - Atribúty a metódy v Pythone

V predchádzajúcej lekcii, Prvá objektová aplikácia v Pythone - Hello object world, sme si ukázali, ako OOP funguje, vysvetlili sme si pojmy trieda a metóda. Naprogramovali sme si našu prvú objektovú aplikáciu.

V dnešnej lekcii Pythonu si uvedieme parametre metód, naučíme sa používať atribúty a tým dokončíme našu prvú objektovú aplikáciu. Nakoniec si ukážeme využitie komentárov.

Parametre metódy

Dajme teraz našej metóde greet() parameter name, aby dokázala pozdraviť konkrétneho používateľa. Prejdeme do súboru greeter.py a takto kód upravme:

def greet(self, name):
    print(f"Hello user {name}")

Vidíme, že syntax parametra metódy je rovnaká, ako syntax premennej. Keby sme chceli parametrov viac, oddeľujeme ich čiarkou. Upravíme tiež kód pod triedou:

class Greeter:
    def greet(self, name):
        print(f"Hello user {name}")

greeter = Greeter()
greeter.greet("Carl")
greeter.greet("Peter")

A výsledok:

Output of greet() method:
Hello user Carl
Hello user Peter

Náš kód je teraz v metóde a my ho môžeme jednoducho pomocou parametrov volať znova s rôznymi parametrami. Nemusíme 2x opisovať "Hello user...". Kód budeme odteraz deliť logicky do metód.

Atribúty triedy

Triede pridáme nejaký atribút. Ponúka sa atribút text, kde bude uložený text pozdravu. Atribúty sa definujú v priestore triedy rovnako ako premenné. Keďže atribúty patria jednotlivým inštanciám objektu, pristupujeme k nim cez parameter self, kde je vždy aktuálny objekt, s ktorým pracujeme. Upravme teda našu triedu:

class Greeter:
    text = ""
    def greet(self, name):
        print(f"{self.text} {name}")

greeter = Greeter()
greeter.greet("Carl")
greeter.greet("Peter")

Vidíme, že Greeter má nový atribút text. Keďže inštancií zdraviča môžeme vytvoriť koľko chceme, prístup k atribútu cez self.text zaistí, že sa text vezme z tej inštancie, na ktoré je metóda zavolaná.

Na vyskúšanie zdraviča s textom teraz chýba už len text nastaviť vytvorenej inštancii:

greeter = Greeter()
greeter.text = "Hello user"
greeter.greet("Carl")
greeter.greet("Peter")
greeter.text = "Hello programmer"
greeter.greet("Richard")

Výsledok:

Konzolová aplikácia
Hello user Carl
Hello user Peter
Hello programmer Richard

Návratová hodnota metódy

Vzhľadom k objektovému návrhu nie je najvhodnejšie, aby si každý objekt ovplyvňoval vstup a výstup, ako sa mu zachce. Pochopiteľne narážame na naše vypisovanie do konzoly. Každý objekt by mal mať určité kompetencie, ktoré by nemal prekračovať. Poverme náš objekt iba zostavením pozdravu a jeho výpis si spracujeme už mimo. Výhodou takto navrhnutého objektu je vysoká univerzálnosť a znovupoužiteľnosť. Objekt doteraz vie len písať do konzoly. My si ho však prispôsobíme tak, aby daná metóda text iba vracala. Bude potom iba na jeho príjemcovi, ako s ním naložia. Takto môžeme pozdravy ukladať do súborov, písať na webové stránky alebo ďalej spracovávať.

Na návrat hodnoty použijeme príkaz return. Príkaz return metódu ukončí a vráti hodnotu. Akýkoľvek kód v tele metódy po príkaze return sa už nevykoná! Upravíme metódu greet():

def greet(self, name):
    return f"{self.text} {name}"

A náš program bude teraz vyzerať takto:

class Greeter:
    text = "Hello"
    def greet(self, name):
        return f"{self.text} {name}"

greeter = Greeter()
greeter.text = "Hello user"
print(greeter.greet("Carl"))
print(greeter.greet("Peter"))
greeter.text = "Hello programmer"
print(greeter.greet("Richard"))

Teraz je náš kód podľa dobrých praktík.

Komentáre

Ešte našu triedu okomentujme ako sa patrí. Komentáre budeme písať pod názov triedy a pod názov každého atribútu a metódy. Na ich zápis použijeme tri dvojité úvodzovky ("""). Zdokumentovaná trieda môže vyzerať napr. takto:

class Greeter:
    """
    A class represents a greeter whose purpose is to greet the user.
    """

    text = "Hello"
    """
    An attribute containing the default greeting text. If no other text is specified,
    this default text will be used when creating a greeting.
    """


    def greet(self, name):
        """
        Returns a greeting for the user with the set text and given name.

        Parameters:
        - name (str): The given name of the person we want to greet.

        Output:
        - str: A greeting text with the person's given name.
        """
        return f"{self.text} {name}"

Význam self

V Pythone je self jedným z kľúčových konceptov v objektovo orientovanom programovaní a je dôležité ho pochopiť. Keď už vieme, čo je inštancia a ako sa tvoria atribúty, poďme si ho vysvetliť jednoducho a názorne.

Keď vytvárame objekt (inštanciu triedy), predstavíme si ho ako špeciálny box. Každý box (objekt) má svoje vlastné dáta (atribúty) a nástroje, ktoré s týmto boxom môžeme robiť (metódy). Keď chceme, aby box (objekt) niečo urobil, potrebujeme spôsob, ako na tento konkrétny box odkazovať. A práve self je spôsob, ktorým to dosiahneme.

A sme na konci. Za úlohu máte prerobiť si našu konzolovú kalkulačku do objektov.

V nasledujúcom kvíze, Kvíz - Úvod, objekty, triedy a metódy v Pythone, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 56x (1.55 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Prvá objektová aplikácia v Pythone - Hello object world
Všetky články v sekcii
Objektovo orientované programovanie v Pythone
Preskočiť článok
(neodporúčame)
Kvíz - Úvod, objekty, triedy a metódy v Pythone
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
116 hlasov
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity