[python-uk] Advice on decorator grammar

Simon Yarde simonyarde at me.com
Wed Apr 3 13:34:47 CEST 2013


Hi All

I've not posted to this list before. Hello!

I have a question about decorators and have failed to devise a search that has thrown up any history of discussion on this particular matter.

Does the following seem like something that 'should' work? Or is anyone aware of a source of documentation that explains historically why the following syntax might not be allowed?

I hope this sort of conundrum/discussion-point is appropriate to this forum; I'm not on python-dev and this is obviously not a bug.

So..

Decorator grammar is this:

decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE

The grammar prevents this:

>>> class MyDecorator:
...     def decorator_method():
...             pass
...
>>> @MyDecorator().decorator_method()
  File "<stdin>", line 1
    @MyDecorator().decorator_method()
                  ^
SyntaxError: invalid syntax

But is possible to achieve the desired effect by assigning the class instance to variable:

>>> mydecorator = MyDecorator()
... @mydecorator.decorator_method
... def f():


My initial thoughts were that the syntax provided a neat way to provide a configurable decorator class instance with a number of alternative decorator-function generating methods, rather than just the usual __call__.

S


More information about the python-uk mailing list