NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 18 - Dekorátory podruhé - Parametrické a třídní dekorátory

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
DarkCoder
Člen
Avatar
Odpovídá na Pavel Buřič
DarkCoder:1. srpna 9:14

Dekorátory v Pythonu jsou speciální funkce, které umožňují modifikovat chování jiné funkce nebo metody – aniž bys musel(a) měnit její zdrojový kód. Jsou to v podstatě "obaly", které přidávají funkcionalitu.

Slouží například k logování, měření výkonu, oprávnění, kešování a další

Odpovědět
1. srpna 9:14
"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 Pavel Buřič
DarkCoder:1. srpna 9:20

Jinak bez dekorátorů se dá úplně v pohodě vyžít. Nejsou povinné ani nezbytné pro běžné programování v Pythonu. Jen existuji místa kde dekorátory pomáhají.. ušetří psaní a zlepší čitelnost a modularitu.

Odpovědět
1. srpna 9:20
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Pavel Buřič :1. srpna 9:47

Díky za reakci určitě to člověk časem pochopí,ale aktuálně je to alespoň pro mne spíše matoucí

 
Odpovědět
1. srpna 9:47
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pavel Buřič
DarkCoder:1. srpna 10:58

Srovnání:

bez dekorátoru:

import time

def secti(a, b):
    return a + b

start = time.time()
vysledek = secti(5, 7)
end = time.time()

print(f"Výsledek: {vysledek}")
print(f"Doba běhu: {end - start:.6f} sekund")

S dekorátorem:

import time
from functools import wraps

def merit_cas(funkce):
    @wraps(funkce)
    def obal(*args, **kwargs):
        start = time.time()
        vysledek = funkce(*args, **kwargs)
        end = time.time()
        doba = end - start
        return vysledek, doba
    return obal

@merit_cas
def secti(a, b):
    return a + b

vysledek, doba = secti(5, 7)
print(f"Výsledek: {vysledek}")
print(f"Doba běhu: {doba:.6f} sekund")
Odpovědět
1. srpna 10:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
MARTIN CIBULKA:6. srpna 16:31

Pekné vysvetlenie tie pomenovania metód spravia dosť rozdiel.
Ďakujem

Odpovědět
6. srpna 16:31
never give up
Avatar
Enaad Majed Alblawi:21. srpna 19:37

This was very complex and hard to understand, felt a lot about decorators have been crammed into 2 pages when we should've had an extended couple pages explaining it as basic as possible in a basic level for new beginners. I spent literally 3 hours going back and forth between all the lines of code so i can understand what's going on and I even had to use other resources such as youtube and co pilot to understand it better.

Odpovědět
21. srpna 19:37
Life's too short make the most of it.
Avatar
Radomir Blazek:Včera 15:28

**Ahoj, kde se vezme trida "trida"?
**

def over_uroven_opravneni(trida):

    class UrovenOpravneni(trida):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.uroven_opravneni = kwargs.get('uroven_opravneni', 0)

        def zobraz_citlive_informace(self):
            if self.uroven_opravneni >= 5:
                return f"[Přístup povolen]: {super().zobraz_citlive_informace()}"
            else:
                return f"[Přístup odepřen]: Nedostatečná úroveň oprávnění (úroveň {self.uroven_opravneni}/5)."

    return UrovenOpravneni

@over_uroven_opravneni
class Zamestnanec:
    def __init__(self, jmeno, pozice, uroven_opravneni=0):
        self.jmeno = jmeno
        self.pozice = pozice
        self.uroven_opravneni = uroven_opravneni

    def zobraz_informace(self):
        return f"Zaměstnanec: {self.jmeno}, Pozice: {self.pozice}"

    def zobraz_citlive_informace(self):
        return "Citlivé informace o zaměstnanci a firmě..."

zamestnanec_jan = Zamestnanec("Jan Novák", "Vývojář", uroven_opravneni=1)
print(f"{zamestnanec_jan.jmeno}: {zamestnanec_jan.zobraz_citlive_informace()}")

zamestnanec_petr = Zamestnanec("Petr Sýkora", "Manažer", uroven_opravneni=5)
print(f"{zamestnanec_petr.jmeno}: {zamestnanec_petr.zobraz_citlive_informace()}")
 
Odpovědět
Včera 15:28
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 7 zpráv z 27.