Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 18. diel - Dekorátory druhýkrát - Parametrické a triedne dekorátory

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
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Pavel Buřič
DarkCoder:1. augusta 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ší

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Pavel Buřič
DarkCoder:1. augusta 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.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Pavel Buřič :1. augusta 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
Odpovedá na Pavel Buřič
DarkCoder:1. augusta 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")
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
MARTIN CIBULKA:6. augusta 16:31

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

Odpovedať
never give up
Avatar
Enaad Majed Alblawi:21. augusta 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.

Odpovedať
Life's too short make the most of it.
Avatar
Radomir Blazek:8. septembra 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. septembra 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. októbra 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. novembra 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. :)

Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 30.