[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