[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