IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 20. diel - Magické metódy v Pythone

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
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. :)

 
Odpovedať
6.3.2019 18:57
Avatar
gcx11
Tvůrce
Avatar
Odpovedá 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
Editované 9.3.2019 13:12
 
Odpovedať
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!

 
Odpovedať
28.4.2019 10:30
Avatar
Josef Rajmon
Brigádník
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?

Odpovedať
17.9.2019 13:01
Existuje lepší moznost, najdi ji!
Avatar
Josef Rajmon
Brigádník
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?

Odpovedať
17.9.2019 13:04
Existuje lepší moznost, najdi ji!
Avatar
Odpovedá 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 ...

Odpovedať
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).

 
Odpovedať
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.

 
Odpovedať
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__

 
Odpovedať
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

 
Odpovedať
13.9.2022 7:23
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.

Zatiaľ nikto nevložil komentár - buď prvý!