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:

Diskusia – 4. diel - Hracia kocka v Pythone - Zapuzdrenie a konštruktor

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
CamlostCZ
Člen
Avatar
Odpovedá 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.

Avatar
Martina Zemanová:30.7.2023 22:30

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

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"

Avatar
Karel Zaoral
Člen
Avatar
Karel Zaoral:25.9.2023 17:21

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

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

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
Editované
Avatar
Karel Zaoral
Člen
Avatar
Odpovedá 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:-)

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.

Avatar
Tomas Hrdlicka:11.7.2024 15:39

Možná to další lekce srovnají do většího celku, ale teď mi lekce připadají chaoticky sepsané, doplňované

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 95.