Tu ukazku jsem si ted vycucal z prstu, aby jen bylo videt co hledam.
Dekorat nemusi byt muj, a ani jinej dekorator nechci znovu dekorovat :)
Tim padem do obalovane funkce nic vlozeno nebude. Predstavoval jsem si,
ze to zjistim nejakym zpusobem pres reflexi, ale jak jsm psal, nemuzu
natrefit na ty spravne atributy.
lachtan
Dne 23.6.2010 9:30, Petr Messner napsal(a):
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
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python