[python] Dekorovana funkce

Petr Messner petr.messner na gmail.com
Středa Červen 23 09:30:14 CEST 2010


Pokud se jedná o tvůj vlastní dekorátor, můžeš vracené funkci  
nastavit nejaký atribut, jehož přítomnost pak můžeš testovat.

Mimochodem ten dekorátor co uvádíš není nejlepší, protože  
přepisuje název a dokumentaci původní funkce. Tím by to také  
možná šlo zjistit.

Petr Messner

23.6.2010 v 9:14, Martin Blažík <lachtan na fnet.cz>:

> Čusík,
> nemáte někdo představu, jak zjistit za běhu programu, zda funkce  
> či
> metoda byla obalena konkrétním dekorátorem? Mějme tento  
> ukázkový kód
>
> def decorator(func):
>  def wrap(*args, **kwargs):
>      return func(*args, **kwargs)
>  return wrap
>
> def test1():
>  return 'test1'
>
> @decorator
> def test2():
>  return 'test2'
>
> @decorator
> def test3():
>  return 'test3'
>
> a já bych rád měl funkci
>
> def isDecorated(function, decor):
>  pass
>
> která vrátí True, pokud function vznikla tak, že nějaká jiná  
> funkce
> (nezáleží na tom jaká) byla obalena dekorátorem decor. Mohl bych  
> napsat
> třeba
>
> lst = [test1, test2, test3]
> for function in lst:
>  if isDecorated(function, decorator):
>    print function.__name__, 'YES'
>  else:
>    print function.__name__, 'NO'
>
> Snažil jsem se o tom něco najít na inetu i jsem provedl hromadu
> testování za použítí různých atributu funkce, ale pořád  
> nemůžu najít řešení.
>
> Za všechny nápady předem dík
> lachtan
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python