I was referring more to the fact that you don't need parentheses around that—if I remove the leading space, it looks like @ is an operator that operates on the first `Spam()`:

    @Spam() + Spam()
    def func()
        pass

while instead it's just part of the (compound) statement syntax for function definition.

If one had to think of @ as an operator, it would be a unary operator of the absolute lowest priority. So, from a code style perspective, should we add a space between it and the expression? This should be discussed and added to PEP8, it's a very transcendental matter! ;)

On Sat, 19 Sep 2020, 03:45 Christopher Barker, <pythonchb@gmail.com> wrote:
On Fri, Sep 18, 2020 at 3:50 PM Paolo Lammens <lammenspaolo@gmail.com> wrote:


    class Spam:


        def __add__(self, other): return self       


        def __call__(self, f): return f





    @ Spam() + Spam()


    def func():


        pass

I think so, yes.
 


That looks hella weird XD



Indeed it does, but you can do all kinds of other "weird" stuff with callables -/ they are objects like any other, and this can be the result of virtually any expression.

-CHB 


--
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython


--
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython