[python] Dekorovana funkce

Martin Blažík lachtan na fnet.cz
Středa Červen 23 09:14:21 CEST 2010


Č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


Další informace o konferenci Python