[Python-Dev] decorator support
Josiah Carlson
jcarlson at uci.edu
Mon Sep 6 00:42:56 CEST 2004
> newf.__doc__ = oldf.__doc__ # copy the docstring
> newf.__dict__.update(oldf.__dict__) # copy attributes
> newf.__name__ = oldf.__name__ # keep the name (new in Py2.4)
> newf.__undecorated__ = oldf # [XX NEW] ptr to undecorated obj
If one were to consider function decorators as a type of 'subclass' of a
particular function, that is, post-decoration a function inherits from
the pre-decoration version of the function, we could, with a single
attribute (like __undecorated__ or __proxyfor__ as suggested) and proper
introspection tools, do iterative attribute lookups similar to the way
that it is already done with classes (without diamond-inheritance). That
is, one wouldn't need to copy __doc__, __name__, and __dict__ from a
decorated function, one would get access to them automatically.
In current Python, what I am saying would be equivalent to...
def foo(arg):
pass
t = foo
foo = arbitrary_decorator(foo)
foo.__proxyfor__ = t
del t
It would be some 'behind-the-scenes-magic', but I think it may be the
right amount and kind of magic.
- Josiah
More information about the Python-Dev
mailing list