[python] Dekorátor - prosím pěkně o konzultaci a vysvětlení
Michal Molhanec
mol-python na seznam.cz
Úterý Květen 8 14:22:35 CEST 2012
Dne 7.5.2012 23:09, Martin Stiborský napsal(a):
> Ahoj,
> řekl jsem si, že pro jednu situaci by se mi docela hodil dekorátor, že
> by to bylo hezké a vůbec mi to přišlo jako dobrý nápad.
> Je to asi poprvé co tenhle syntactic sugar někde vážně používám, takže
> jsem s tím trochu bojoval.
> Můj dekorátor funguje uvnitř třídy, může si šáhnout na self a bere
> argumenty, takže přesně to, co jsem po něm chtěl.
>
> Akorát mi pořád hlava nebere to dvojité zanoření metod (dvojité aby
> fungoval ten parametr, došel jsem k tomu víceméně přes pokus-omyl).
> Chtěl bych vás poprosit o vysvětlení, co a jak se tam děje, koukám na
> to, ale nevím.
Pokud nema dekorat parametry, pak
@d
def f(...):
...
je ekvivalent
def f(...):
f = d(f)
Pokud ale muze mit parametry, pak
@d(p)
def f(...):
je ekvivalent
def f(...):
_d = d(p)
f = _d(f)
tj. d neni v podstate primo dekorator, ale tovarna, ktera dekorator vytvori (1. vnoreni) a ten pak vetsinou obsahuje wrapper puvodni funkce (2. vnoreni)
def d(parametr): # tovarna
def vlastni_dekorator(puvodni_funkce):
def obalka():
puvodni_funkce()
return obalka
return vlastni_dekorator
--
Zdraví,
Michal Molhanec
Další informace o konferenci Python