NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:
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
Nejnovější komentáře jsou na konci poslední stránky.
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
"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
"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í

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
"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
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
Life's too short make the most of it.
Avatar
Radomir Blazek:8. září 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()}")
Avatar
Mário Martinelli:15. září 19:15

Zatiaľ najkomplikovanejšie učivo. Čo je vporiadku. Ale bolo by fajn, keby sa to vysvetľovalo na čo najľahších príkladoch na začiatok. Ideálne s názvami ktoré niesu podobné (či dokonca zhodné) pre viaceré objekty naraz a pomohlo by aj vysvetľovanie v češtine v poznámkach priamo v kóde.

Avatar
Rostislav Mikolaš:17. října 15:10

Nic není špatně, dekorátory asi budou tím nezmatenějším tématem pro mou hlavu i když se to asi nějak taky dá pochopit.Možná ten poslední zápis, kdy funkce vrací funkci a já mohu zapsat do následující závorky rovnou argument volané funkce, jsem musel dotazovat chatgpt neb ta syntaxe nebyla dříve zmíněna mohla být taky vysvětlena.

Avatar
Maxim Jucov
Člen
Avatar
Maxim Jucov:1. listopadu 9:11

Dost flustrujici latka, ktera dle meho neni uplne nejlepe vysvetlena a musel jsem to dohanet pres chatgpt. Chvili jsem myslel ze je to asi jen mnou, komu to nejak nedochazi ale vidim, ze asi opravdu nejsem sam. :)

Nejnovější komentáře jsou na konci poslední stránky.
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 30.