Method chaining on decorator got SyntaxError

Duncan Booth duncan.booth at invalid.invalid
Thu Feb 17 05:12:51 EST 2011


alex23 <wuwei23 at gmail.com> wrote:

> Makoto Kuwata <k... at kuwata-lab.com> wrote:
>> I'm sad about this restriction because:
>>
>>     @recipe.product('*.html').ingreds('$(1).rst')
>>     def file_html(c):
>>         # do something
>>
>> is enough simple and more readable than:
>>
>>     @recipe.product('*.html')
>>     @recipe.ingreds('$(1).rst')
>>     def file_html(c):
>>         # do something
>>
>> But I'll follow the Python's philosophy.
> 
> Personally, I'd find this approach a lot clearer:
> 
> rst2html = recipe.product('*.html').ingred('$(1).rst')
> 
> @rst2html
> def file_html(c):
>    # etc
> 
> It allows for easier reuse of your decorators and it labels it in a
> way that I can understand from the name as opposed to having to
> decipher the decorator method chain to work out its intent.

Or another way would be to define `recipe` such that something like this 
works:

@recipe(product='*.html', ingreds='$(1).rst')
def file_html(c):
   ...




-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list