[python] Dekorovana funkce

Martin Blažík lachtan na fnet.cz
Středa Červen 23 13:07:08 CEST 2010


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 <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
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python