[Python-Dev] dealing with decorators hiding metadata of decorated functions (original) (raw)
Brett Cannon brett at python.org
Sat Mar 18 00:44:16 CET 2006
- Previous message: [Python-Dev] Py3K timescale and stdlib philosophy (was: Re: Py3K thought: use...)
- Next message: [Python-Dev] dealing with decorators hiding metadata of decorated functions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
With the discussion of a possible @decorator to help set the metadata of the decorator to that of what the wrapped function has, I had an idea that I wanted to toss out there (this dicussion stems from a blog post I made: http://sayspy.blogspot.com/2006/03/how-to-handle-object-identity-issues.html).
The problem I have with the current practice of setting name and doc (updating dict I have no problem with) is that is destroys metadata on the decorator. This seems kind of bad to destroy metadata for introspection purposes.
So how about a decorates attribute that points to what something is decorating? Then help() along with 'inspect' can be changed to look for that attribute, and if it is there, use that for introspection. This way advanced users can still poke at the decorator for information while more common introspection will still point to the decorated function instead of the decorator itself, all without data loss! And on top of it all, it's simple to add support for (obviously the actual code in 'inspect' would be different than what is below =) !::
_help = help
def help(obj): while hasattr(obj, "decorates"): obj = obj.decorates _help(obj)
Worst case is advanced users at the command line will be put out by not being able to directly look at obj.doc for the docstring they care about and such. But this should be a minor issue.
But if people don't like that, I do have another proposal to add a
signature attribute that would hold an object representing the
call signature of a function. This could then be put on a decorator
so that introspection on the calling requirements of a decorated
function are correct instead of the typical *args, **kwargs
.
Anyway, what do people think of a decorates attribute?
-Brett
- Previous message: [Python-Dev] Py3K timescale and stdlib philosophy (was: Re: Py3K thought: use...)
- Next message: [Python-Dev] dealing with decorators hiding metadata of decorated functions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]