[Python-Dev] Re: PEP 318 bake-off?

Phillip J. Eby pje at telecommunity.com
Thu Apr 1 19:12:35 EST 2004


At 03:47 PM 4/1/04 -0800, Guido van Rossum wrote:
> > > as [rst_directive(
> > >         arguments=(1,0,1),
> > >         options={'class': directives.class_option},
> > >         content=1
> > >     )
> > > ] def admonition(*args):
> > >     return make_admonition(nodes.admonition, *args)
> >
> > I suppose so, but a generic function attribute decorator
> > would do just as well.  IOW, it doesn't have to be
> > "rst_directive", just "attributes" would do fine.
>
>I like rst_directive(), because it's more specific -- it would catch
>mistakes earlier.  E.g. if you misspelled argumnets, attributes()
>would have no clue about it; but rst_directive() should have specific
>keywords.

Yeah, that's why I wrote the example that way.  Once you have an 
'attributes()' decorator, it's easy to create task-specific versions of it, 
e.g.:

def my_decorator(foo,bar,baz):
     return attributes(**locals())

And of course you can have defaults, and do validation of the attributes 
before the return statement.

And there's an additional reason to use task-specific decorators: if you 
later decide that function attributes aren't as useful, or you need to 
change what the attributes are named, or you decide to stick all the 
options into an object and use only one attribute, you need only change the 
task-specific decorator, not all the things that call it.




More information about the Python-Dev mailing list