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

Diskuze – Lekce 21 - Magické 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
Avatar
Daniel Zábojník:31.10.2023 11:26

Děkujeme za vaše podněty. Lekci jsme přepracovali :-)

 
Odpovědět
31.10.2023 11:26
Avatar
Elvíra Krieger:21.3.2024 23:23

Chtělo by to vysvětlit vyvolávání výjimek, nebo aspoň odkázat někam na vysvětlení. A ukázkové kódy jsou na pochopení fakt hodně složité, ty, které jsou v druhé lekci ve shrnutí, by asi byly pro první ukázku výrazně pochopitelnější a přehlednější

Odpovědět
21.3.2024 23:23
Every first draft is perfect because all the first draft has to do is exist. It's perfect in its existence. The ...
Avatar
Jean Kocman :3.12.2024 21:30

aaaa co jsem komu udělal! Tohle je víc a víc horší.

 
Odpovědět
3.12.2024 21:30
Avatar
Veronika Viková:22. dubna 18:56

Někde jsem se ztratila a nemohu najít cestu :-(. Z výkladu to vůbec nechápu. Vůbec nevím k čemu je přetížení operátoru a proč to potřebuji, asi mi někde něco uniklo.

 
Odpovědět
22. dubna 18:56
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Veronika Viková
DarkCoder:22. dubna 19:33

Přetížení operátoru umožňuje definovat, jak se budou běžné operátory chovat pro tvé vlastní třídy. Díky tomu se můžeš chovat k instancím svých tříd podobně jako k běžným typům.

Příklad na přetížení operátoru + pro třídu Vector aby si mohla sčítat dva vektory:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Ukázka použití
v1 = Vector(2, 3)
v2 = Vector(4, 1)
v3 = v1 + v2

print(v3)  # Výstup: Vector(6, 4)

__add__ je speciální metoda (tzv. dunder method), kterou Python zavolá, když použiješ +.

v1 + v2 ve skutečnosti volá v1.__add__(v2).

Výsledkem je nový objekt typu Vector, který má součet souřadnic x a y.

__repr__ je speciální metoda, která určuje, jak se objekt zobrazí, když ho vypíšeš (např. pomocí print()), nebo když ho vidíš v konzoli/interpretu. Má za cíl vrátit reprezentaci objektu

Odpovědět
22. dubna 19:33
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Veronika Viková
DarkCoder:22. dubna 19:43

Můžeš to pochopitelně napsat i bez přetížení:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def add(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(1, 4)
v3 = v1.add(v2)
print(v3)  # Vector(3, 7)

S přetížením +

v3 = v1 + v2

Obojí dělá totéž, jen varianta s přetížením vypadá přirozeněji

Přetížení operátorů je o pohodlí a čitelnosti. A použiješ to tehdy když chceš, aby se tvoje objekty chovaly jako běžné typy. Přetížení operátorů není povinné, ale může být v mnoha ohledech elegantní a užitečné.

Odpovědět
22. dubna 19:43
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Veronika Viková:22. dubna 19:46

Děkuji za vysvětlení.

 
Odpovědět
22. dubna 19:46
Avatar
Žaneta Janáčová:15. června 22:11

já mam prostě s články od gcx11problém. za mě nejsou psané pro začátečníky a jen těžko se výklad chápe. určitě to lze vysvětlit víc laicky než na komplexních číslech a vektorech

 
Odpovědět
15. června 22:11
Avatar
Barbora Zdvihalová:4. července 22:21

Mam problem s tim, kdyz se neco ukaze a pak se napise "je to moc slozite, takze si o tom povime priste". Tyto lekce jsou hodne nadupane ucivem a prijde mi, ze jsou nedovysvetlene, v kodu mi chybi vic popisku. Chapu, ze pro tvurce je to neco, co se probiralo v kapitole xy, ale zacatecnikum by pomohlo si to zvedomovat prubezne znovu a znovu. Diky.

 
Odpovědět
4. července 22:21
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:4. července 22:28

Zmínka o tom, že je něco složité a tak si o tom povíme příště, je obrovské výkladové faux pas. Vyučující by měl mít cit a měl by umět poskládat kapitoly za sebou tak aby následující látka měla vše potřebné. Jinak je to akorát kontraproduktivní. Bohužel ta četnost tohoto přešlapu je příliš veliká. Nedivím se, že spousta zde učících se má problém s pochopením látky. Ale je dobře, že se zde tyhle reakce dějí, jen tak se to může posunout k lepšímu.

Odpovědět
4. července 22:28
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 42.