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 <[email protected]>:

Č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
[email protected]
http://www.py.cz/mailman/listinfo/python
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem