Method chaining on decorator got SyntaxError

MRAB python at mrabarnett.plus.com
Wed Feb 16 18:49:30 EST 2011


On 16/02/2011 23:25, Makoto Kuwata wrote:
> Hi,
>
> I have a question about decorator.
> I tried the following example and got Syntax Error.
>
>      class deco(object):
>          def __init__(self, name):
>              self._name = name
>          def foo(self, value):
>              self._foo = value
>              return self
>          def __call__(self, func):
>              func._deco = self
>              return func
>
>      ## ok
>      @deco('aaa')
>      def f1(): pass
>
>      ## Syntax Error
>      @deco('aaa').foo('bbb')  # SyntaxError: invalid syntax
>      def f2(): pass
>
> The above code shows that Python doesn't allow method chain
> on decorator syntax.
> Why does this limitation exist?
> I want to chain methods as a certain DSL, just like:
>
>      @recipe().product('*.html').ingreds('$(1).rst')
>      def file_html(c):
>          system(c%"rst2html.py $(ingred)>  $(product)")
>
> If you know the reason of the restriction, let me know it.
>
You may want to read the discussion at:

https://groups.google.com/group/python-ideas/browse_thread/thread/1eebf486969c39a1/?hl=en



More information about the Python-list mailing list