NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 4 - Hrací kostka v Pythonu - Zapouzdření a konstruktor

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
Avatar
CamlostCZ
Člen
Avatar
Odpovídá na Filip Stupka
CamlostCZ:21.7.2023 0:03

Importovat modul uvnitř funkce či metody je chyba. PEP8 jasně praví:

Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

 
Odpovědět
21.7.2023 0:03
Avatar
Martina Zemanová:30.7.2023 22:30

Chybí vysvětlení určitých částí výsledného kódu....

 
Odpovědět
30.7.2023 22:30
Avatar
Peter Lašak
Člen
Avatar
Peter Lašak:4.8.2023 22:45

Nepríde mi to ako chyba, skôr ako otázka vkusu alebo verzií pythonu.

Na miesto používani metody format():

def __str__(self):

#Vrací textovou reprezentaci kostky.

return str("Kostka s {0} stěnami".format(sel­f._pocet_sten))

By som radšej použil f-string:

def __str__(self):

#Vrací textovou reprezentaci kostky.

return f"Kostka s {self._pocet_sten} stenami"

 
Odpovědět
4.8.2023 22:45
Avatar
Karel Zaoral
Člen
Avatar
Karel Zaoral:25.9.2023 17:21

Ahoj všem, díky za zpětnou vazbu, lekci aktualizujeme.

 
Odpovědět
25.9.2023 17:21
Avatar
František Novák:6.10.2023 10:55

Je to dobře napsané, jen bych prosil více rozepsat, co je to vlastně ten konstruktor

 
Odpovědět
6.10.2023 10:55
Avatar
Daniel Zábojník:12.10.2023 14:35

Děkujeme za vaše podněty. Lekci jsme aktualizovali :-)

 
Odpovědět
12.10.2023 14:35
Avatar
Jakub Ježek
Člen
Avatar
Jakub Ježek:6.12.2023 14:17

Ahoj,je prosím nějaký rozdíl mezi atributy zadanými přímo dané třídě, např:

class kostka:
    pocet_sten = 6

a atributy zapsanými konstruktoru:

def __init__(self):
    self._pocet_sten = 6
Editováno 6.12.2023 14:19
 
Odpovědět
6.12.2023 14:17
Avatar
Karel Zaoral
Člen
Avatar
Odpovídá na Jakub Ježek
Karel Zaoral:6.12.2023 22:15

Ahoj! Ano, existuje zásadní rozdíl mezi atributy definovanými přímo ve třídě a atributy definovanými v konstruktoru. Jedná se o pokročilejší téma, kterému se budeme věnovat později, ale stručně:
Atributy definované přímo ve třídě, jako pocet_sten = 6 v příkladu, jsou sdílené mezi všemi instancemi této třídy. Tento atribut je spíše charakteristikou celé třídy než jednotlivých instancí:

class Kostka:
    pocet_sten = 6

a = Kostka()
b = Kostka()

print(a.pocet_sten)  # Vypíše 6
print(b.pocet_sten)  # Vypíše 6

Kostka.pocet_sten = 8
print(a.pocet_sten)  # Nyní vypíše 8
print(b.pocet_sten)  # Také vypíše 8

Atributy definované v konstruktoru, jako self._pocet_sten = 6, jsou specifické pro každou instanci třídy. Každá instance má svou vlastní kopii tohoto atributu a změna hodnoty tohoto atributu pro jednu instanci neovlivní ostatní instance téže třídy.

Ale:
Když definuješ třídu s atributem třídy a poté vytvoříš atribut instance se stejným jménem v konstruktoru, dojde k následujícímu chování:

  • Atribut třídy je dostupný všem instancím třídy, dokud není přepsán atributem instance.
  • Když definuješ atribut instance ve funkci __init__() (v konstruktoru), každá instance třídy bude mít svou vlastní kopii tohoto atributu. Tento atribut instance "zastíní" (shadow) atribut třídy se stejným jménem.

Pokud přistupuješ k atributu pomocí instance, Python nejprve hledá tento atribut v instanci. Pokud jej nenalezne, hledá ho ve třídě (a poté v nadřazených třídách, pokud třída dědí od jiných tříd):

class Kostka:
    pocet_sten = 6  # Atribut třídy

    def __init__(self):
        self.pocet_sten = 8  # Atribut instance

a = Kostka()
print(a.pocet_sten)  # Vypíše 8, protože to je hodnota atributu instance

print(Kostka.pocet_sten)  # Vypíše 6, protože to je hodnota atributu třídy

Ale jak jsem psal v úvodu, zatím se tím netrap, předbíháš dobu:-)

 
Odpovědět
6.12.2023 22:15
Avatar
Jakub Ježek
Člen
Avatar
Odpovídá na Karel Zaoral
Jakub Ježek:7.12.2023 7:09

Super. Dekuju.

 
Odpovědět
7.12.2023 7:09
Avatar
Lucie Králová:28.4.2024 20:21

Celkem dobře popsaná lekce, ale občas chaoticky strukturovaná. Doplňuje nebo opakuje obsah z druhé lekce, ale upřímně si myslím, že by bylo lepší tolik nedoplňovat, ale spíše informace k danému tématu vždy zmínit při prvním setkání. Věci, které jsem nechápala ve druhé lekci jsem pochopila až teď díky doplnění a je to podle mě škoda. Rozhodně by podle mě tato lekce měla předcházet předchozím cvičením.

 
Odpovědět
28.4.2024 20:21
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 10 zpráv z 90.