How to peek inside a decorated function
Peter Otten
__peter__ at web.de
Sun Feb 15 07:23:33 EST 2009
Steven D'Aprano wrote:
> Suppose I have a function f() which I know has been decorated, but I don't
> have access to the original undecorated function any longer:
>
> def reverse(func):
> def f(*args):
> args = list(args)
> args.reverse()
> return func(*args)
> return f
>
> def say(*args):
> print args
>
> rsay = reverse(say)
> del say
>
>
> Is there any way to peek inside the decorated function rsay() to get
> access to the undecorated function say()?
Here's a hack for Python 2.4:
def make_extractor(x=None):
def extractor(): return x
return extractor
extractor = make_extractor()
function = type(extractor)
def get_cell_contents(cell):
return function(extractor.func_code, {}, "yadda", None, (cell,))()
get_cell_contents(rsay.func_closure[0])(1,2,3)
Peter
More information about the Python-list
mailing list