On Fri, 11 Oct 2013 15:36:29 +1100, Cameron Simpson wrote: > But is it reliable? Will it work on any decorated function?
*Any* decorated function? No, of course not, since decorators can do anything they like: def decorate(func): return lambda *args: "Surprise!" @decorate def something_useful(x, y): return x+y They don't even have to return a function. Or the function being decorated can end up in a different cell: def factory(x, y): def decorator(func): def inner(*args): _ = (x, y) # pretend x and y are useful return func(*args) return inner return decorator @factory(lambda: None, 42) def func(a): return a py> func.func_closure[0].cell_contents 42 py> func.func_closure[1].cell_contents <function <lambda> at 0xb7c4609c> py> func.func_closure[2].cell_contents <function func at 0xb7c4617c> So consider this a *cooperative* undecorator. It can only undecorate things that are decorated the way you expect them to be decorated. -- Steven -- https://mail.python.org/mailman/listinfo/python-list