Hledáš dárek, který neskončí v koši? Nyní 90 % extra kreditů ZDARMA s promo kódem PREKVAPENI90. Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 3 - Atributy a metody v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
DarkCoder
Člen
Avatar
DarkCoder:8. listopadu 22:47

Pokud nevysvětlíte rozdíl mezi třídním atributem a instančním atributem, bude výklad nejasný. Popis kódu v odstavci Atributy Třídy je částečně neúplný, místy chybný a matoucí.

To co je zásadní je přístup k atributu. Pokud instanční atribut neexistuje, hledá se mezi třídními atributy. Tato stěžejní informace vám v článku chybí a riskujete tak to, že čtenář neporozumí tomu co se tam skutečně děje.

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.

To neplatí pokud instanční atribut neexistuje. A pokud neexistuje, vezme si hodnotu z třídního atributu (pokud existuje).

Pokud nebudeme pouštět do hloubky, mohl by kód vypadat takto:

class Zdravic:
    text = "Ahoj"
    def pozdrav(self, jmeno):
        print(f"{self.text} {jmeno}")

zdravic = Zdravic()
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")

Tím zajistíme, že bude existovat vždy nějaký pozdrav, i když žádný text instanci nepřiřadíme. Pokud nějaký text přiřadíme instanci před voláním metody pozdrav(), pak se tato hodnota textu vezme z instančního atributu.

Aby se vidělo, co se tam děje, zde je příklad který tuto techniku ukazuje a zároveň ukazuje, jaké atributy si instance a třída uchovává.

class Zdravic:
    # Atribut třídy
    text = "Ahoj z TŘÍDY"

    def pozdrav(self, jmeno):
        # Zde používáme self.text, ale žádný atribut text v instanci zatím není
        print(f"{self.text} {jmeno}")


# Vytvoříme instanci
z = Zdravic()

# 🔍 Podívejme se, že instance nemá vlastní atributy
print("Atributy instance před voláním:", z.__dict__)

# Zavoláme metodu – používá se třídní atribut
z.pozdrav("Karel")

# Nyní vytvoříme atribut instance
z.text = "Ahoj z INSTANCE"

print("Atributy instance po vytvoření vlastního textu:", z.__dict__)

# Teď už self.text ukazuje na atribut instance
z.pozdrav("Petr")

# A přístup ke třídnímu atributu stále funguje přes třídu
print("Třídní atribut:", Zdravic.text)

Upravte a doplňte si to v článku!

Odpovědět
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Toby Damian Wehle:10. listopadu 6:19

Díky za přehlednou lekci :)

Avatar
Jan Kupčík
Člen
Avatar
Jan Kupčík:20. listopadu 11:42

Upozorňuji na drobnou chybu v textu - "akýkoli kód v těle
metody po příkazu return se již neprovede!"

Nejnovější komentáře jsou na konci poslední stránky.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 13.