On Wed, Aug 11, 2010 at 3:00 PM, Steven D'Aprano <steve at pearwood.info> wrote: >> * The decorator returns the original function (I suppose a reference >> to itself is okay?) > > There's no reason why a function can't have an attribute that refers to > the function itself. It works fine: Yes. But it's more common for the original function to have be modified in some way. e.g.: def autodoc(f): f.__doc__ += document_args(f) return f @autodoc def f(x, y): """Add two numbers""" return x + y And then f.__wrapped__ is not particularly useful because the original function no longer exists and odd things will happen. For example, in the code above autodoc(f.__wrapped__).__doc__ will not equal f.__doc__. >> * The decorator returns the a function that is already decorating >> something else. > > That shouldn't make any difference. Given: > > @wraps(f) > def func(*args): > do_something() > return f(*args) > > then func.__wrapped__ gives f. If f itself wraps (say) g, and g wraps h, > then you have: I guess my description of the problem wasn't clear. I meant: def _debug(*args, **kwargs) print args, kwargs def mock(f): return _debug @mock def plus(a, b): return a + b @mock def prod(a, b): return a * b Schiavo Simon
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4