NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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 20 - 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
Jan Halouzka
Člen
Avatar
Jan Halouzka:6.3.2019 18:57

Našla by se tu nějaká dobrá duše, která by mi nějak jednodušeji vysvětlila with + __enter__ a __exit__? Ideálně i s nějakým jednoduchým příkladem, jak to použít. :)

 
Odpovědět
6.3.2019 18:57
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Jan Halouzka
gcx11:9.3.2019 13:11

Ahoj, __enter__ a __exit__ se používá v případě, že potřebuješ použít nějaký obejkt a pak na něm vždycky provést cleanup, například otevření souboru anebo připojení do databáze. Takto se provede uzavření souboru/spojení na konci with bloku, i když se v něm vyhodí nějaká výjimka. Na začátku with blocku se zavolá metoda __enter__ a vždycky při opuštění bloku se provede __exit__

Ukázka:

class Foo:

    def __enter__(self):
        print("Entering with block")
        return 0

    def __exit__(self, type, value, traceback):
        print("Exiting with block")


with Foo() as f:
    print(f"Value of f: {f}")
    raise Exception("Throwing exception inside with block")

Výstup:

Entering with block
Value of f: 0
Exiting with block
Traceback (most recent call last):
  File "...", line 15, in <module>
    raise Exception("Throwing exception inside with block")
Exception: Throwing exception inside with block
Editováno 9.3.2019 13:12
 
Odpovědět
9.3.2019 13:11
Avatar
jika knaifl
Člen
Avatar
jika knaifl:28.4.2019 10:30

Ahoj, zajimalo by mne, jak Python vi, ze ma po __new__ zavolat __init__.

Ten __new__ dela implicitne to, co mam komentarem?

class Test:

def __new__(cls, fail=False):
print("Zavolana metoda __new__")
if fail == False:
return super().__new__(cls­)#.__init__()

def __init__(self):
self.atribut = "inicializova­ny_atribut"
print("Zavolana metoda __init__")

test1 = Test()

Dekuji!

 
Odpovědět
28.4.2019 10:30
Avatar
Josef Rajmon
Člen
Avatar
Josef Rajmon:17.9.2019 13:01

Ahoj vcelku chapu k cemu to je ale je dulezite abych si to pamatoval nebo to neni nezbytne?

Odpovědět
17.9.2019 13:01
Existuje lepší moznost, najdi ji!
Avatar
Josef Rajmon
Člen
Avatar
Josef Rajmon:17.9.2019 13:04

Ahoj vcelku chapu k cemu to je ale je dulezite abych si to pamatoval nebo to neni nezbytne?

Odpovědět
17.9.2019 13:04
Existuje lepší moznost, najdi ji!
Avatar
Odpovídá na Josef Rajmon
Michal Haňáček:17.9.2019 14:35

Hloupá otázka, ale pokusím se odpovědět nehloupě. Do určité úrovně skillu a úloh kterými se budš zabývat si to pamatovat nemusíš, ale může nastat (a pravděpodobně nastane) situace kdy se ti magické metody budou hodit a pak možná budeš mrzutý že ses to tenkrát nenaučil rovnou ...

Odpovědět
17.9.2019 14:35
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Adam Vondrák:2.3.2022 14:57

Oproti předchozím kapitolám tutoriálu mi zdejší vysvětlení připadají méně srozumitelná (ano, jsem začátečník).

 
Odpovědět
2.3.2022 14:57
Avatar
Petr Kyzlink
Člen
Avatar
Petr Kyzlink:7.7.2022 19:05

Pro začátečníka dosti chaotické až chvílemi nepochopitelné. Ale dokumentace a Google tento nedostatek napravil. Jinak děkuji.

 
Odpovědět
7.7.2022 19:05
Avatar
David Zlatovský:31.8.2022 18:48

Jestli tomu dobře rozumím, tak by tam místo __self__ mělo být __init__

 
Odpovědět
31.8.2022 18:48
Avatar
Lukas
Člen
Avatar
Lukas:13.9.2022 7:23

Tato lekce a následující je vyslověně odbytá, vysvětlení nulové, příklady chotické. Autor začal výborně, zde se zdá že jen chtěl kurz už ukončit s co nejméně práce

 
Odpovědět
13.9.2022 7:23
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 37.