[Python-ideas] Default decorator?
Arnaud Delobelle
arno at marooned.org.uk
Thu Jan 17 10:46:16 CET 2008
python-ideas at python.org
On 17 Jan 2008, at 01:05, Christian Heimes wrote:
> Guido van Rossum wrote:
>> Peter Norvig suggested an idea to me over lunch: a "default
>> decorator". This would be something you could set once per module and
>> it would be invoked for each function definition in the same way as a
>> decorator is invoked, before any explicit decorators. His use case
>> was
>> something that wraps every function that uses argument annotations
>> with something that interprets those annotations in a certain way and
>> enforces that interpretation. It would save having to explicitly
>> annotate every function or method that way.
>>
>> Thoughts? I suggested that a metaclass could do this for methods, but
>> that of course leaves plain functions in the lurch.
>
> Is it really required? As it is trivial to write a meta class to
> decorator all members of a class, it is also trivial to write a
> function
> which accepts a module name and decorate all functions in the module.
>
> def decorate_functions(decorator, modname):
> function = type(decorate_functions)
> namespace = sys.modules[modname].__dict__
> for name, obj in namespace.items():
> if isinstance(obj, function):
> namespace[name] = decorator(obj)
>
> decorate_functions(somefunc, __name__)
>
This doesn't work as decorators don't usually commute. If the module
contains a function:
@foo
def bar(...)
decorate_functions will change it to:
@somefunc
@foo
def bar(...)
Whereas the desired result is:
@foo
@somefunc
def bar(...)
--
Arnaud
More information about the Python-ideas
mailing list