[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')
Advantages:
* 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
Disadvantage:
* I'm still not sure that the "problem" is worth solving.
* Between this and function annotations, it looks like Pascal is coming back.
Raymond
More information about the Python-ideas
mailing list