[Python-Dev] PEP 318: Let's propose some useful built-in decorators

Kevin Jacobs jacobs at theopalgroup.com
Fri Apr 2 15:15:20 EST 2004


Guido van Rossum wrote:

>>> class func_attrs(objects):
>>>
>>>     def __init__(self, **kwds):
>>>         self.attrs = kwds
>>>
>>>     def __call__(self, funcobj):
>>>         funcobj.__dict__.update(self.attrs)
>>>
>>>      
>>>
>>Did you leave out the 'return funcobj' from the end of __call__?  I
>>thought that decorators were supposed to be inherently cooperative,
>>and should return their modified funcobj, or a new func-like-obj.
>>    
>>
>
>Sorry, you're right.  (I've been thinking of interpreting a None
>result as "keep the input object" but the code generation would be too
>messy.
>  
>

Cool.  And now that I have my pedantic hat on, I may as well go all 
out.  First,
why call it func_attrs, when staticmethod and classmethod are 
underscoreless?
Second, I know it is effectively the same, but shouldn't the .update 
line use
vars(funcobj) instead of funcobj.__dict__?   This is something that I am 
asked
(often!) by my Python students.  I use vars(obj) since it looks less 
magical.

-Kevin





More information about the Python-Dev mailing list