[Python-ideas] Assignment decorators (Re: The Descriptor Protocol...)

Raymond Hettinger raymond.hettinger at gmail.com
Tue Mar 8 04:50:41 CET 2011

On Mar 7, 2011, at 4:56 PM, Larry Hastings wrote:

> On 03/03/2011 03:45 PM, Greg Ewing wrote:
>> I think we should have assignment decorators.
>> @decorator
>> lhs = rhs
>> would be equivalent to
>> lhs = decorator('lhs', rhs)
> I timidly propose an alternate syntax.  What I don't like about the above proposal: assignment is no longer a one-liner.  So let's try it inline.
> Example 1:
>   lhs = @decorator
> is equivalent to
>   lhs = decorator(classobject, 'lhs', None)
 . . .
> I'm not confident any of this is a good idea; luckily this isn't the python-good-ideas-only list.  Phew!

Just for the fun of it, here's my offering:

    a := gizmo(arg1, arg2)

is equivalent to

    a = gimzo(arg1, arg2, __name__='a')


  * Doesn't rewrite the order of arguments
  * Keep the current '@' notation unambiguous
  * Still looks like an assignment.
  * Would give a meaningful error message if gizmo() weren't expecting a name
  * Doesn't look like perl
  * Doesn't twist your mind into a pretzel
  * No new keywords
  * Easy to adapt any existing tools that need to know their own name
  * Doesn't seem like magic or spooky action at a distance
  * The program still looks like a Python program

  * I'm still not sure that the "problem" is worth solving.
  * Between this and function annotations, it looks like Pascal is coming back.


More information about the Python-ideas mailing list