[python] Dekorovana funkce

mykhal michal.bozon na gmail.com
Středa Červen 23 12:18:56 CEST 2010


v prvnim priblizeni by mohlo jit pouzit neco takoveho:

def decorator(func):
  def wrap(*args, **kwargs):
      return func(*args, **kwargs)
  return wrap

def isDecorated(func):
    import types
    clo = getattr(func, 'func_closure', None)
    if not clo:
        clo = getattr(func, '__closure__', None) # py3k
    return bool(clo and isinstance(clo[0].cell_contents,
types.FunctionType))

def f1(): pass

@decorator
def f2(): pass

print(isDecorated(f1))
print(isDecorated(f2))


On Jun 23, 9:14 am, Martin Blažík <lach... na fnet.cz> wrote:
> 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