Can you fix up wrapper function argument signatures?

Diez B. Roggisch deets at nospam.web.de
Mon Nov 27 17:54:58 EST 2006


Gerard Brunick schrieb:
> Consider:
> 
>  >>> def negate(func):
> ...     def wrapper(*args, **kwargs):
> ...         return not func(*args, **kwargs)
> ...     return wrapper
> ...
>  >>> def f(x):
> ...     return x > 10
> ...
>  >>> g = negate(f)
>  >>> g(20)
> False
>  >>> g(5)
> True
> 
> Now g has the argument signature of (*args, **kwargs).  Pop-up help in 
> Python
> Scripter(which is great by the way) tells me this, as does
> 
>  >>> g.func_code.co_varnames
> ('args', 'kwargs')
> 
> Is there anyway to fix this in negate?  I assume that I can't just start
> changing things in g.func_code since the bytecodes depend on the order
> of variables and lots of other stuff that I don't claim to understand.
> 
> Please note: From the new functools module, I see that one can set/update
> __module__, __name__, __doc__, and __dict__ using the corresponding 
> attributes
> from the wrapped function; however, none these fix up the argument 
> signature
> do they?  (I'm still running 2.4, so I haven't tried it.)

You can use Michele Simionato's decorator-module.

http://www.phyast.pitt.edu/~micheles/python/documentation.html

HTH,

Diez



More information about the Python-list mailing list