[Python-ideas] Object grabbing

Robert van Geel robert at bign.nl
Mon May 2 08:04:10 EDT 2016


That's a matter of perception. As said this syntax was implemented and 
used for a long time in another (now obsolete) language (visual foxpro) 
and there it never led to confusion or errors nor have I ever heard such 
complaints from any other user in that community. For Python developers, 
since this is a yet unfamiliar syntax, this might look unfamiliar and 
hence rejectable.

On 5/2/2016 1:48 PM, João Santos wrote:
> I think the ".d = 1" statement feels like a bug waiting to happen. 
> It's very easy to miss a dot.
>
> On 2 May 2016 at 09:34, Robert van Geel <robert at bign.nl 
> <mailto:robert at bign.nl>> wrote:
>
>     On 5/2/2016 5:28 AM, Franklin? Lee wrote:
>
>         On Sun, May 1, 2016 at 4:27 PM, Robert van Geel
>         <robert at bign.nl <mailto:robert at bign.nl>> wrote:
>
>             First of all I'm new to this. I tried figuring out if some
>             inquiry like mine
>             below already was posted but I couldn't find it, frankly
>             partly because I
>             don't know what to look for, I'm not sure if there's a
>             name for this idea.
>             I'm not convinced my idea below is solid so apologies if
>             it's naïve but I
>             figured to post it anyway.
>             It has to do with the possibility to fold typical opcodes
>             pairs by
>             introducing a language construct.
>
>             The idea is to be able to write this code:
>
>             myobject.a
>             myobject.b
>             myobject.c()
>             myobject.d = 1
>
>             like this:
>
>             using myobject:
>                  .a
>                  .b
>                  .c()
>                  .d = 1
>
>         Would the following solve your usecase? Explicit naming:
>
>              with myobject import a,b,c,d:
>                  a
>                  b
>                  c()
>                  d = 1
>
>
>         Alternatively, putting the object at the end (like in gen
>         expressions):
>
>              with a,b,c,d from myobject:
>                  a
>                  b
>                  c()
>                  d = 1
>
>
>         Questions:
>              * Should this add additional scope?
>              * Descriptors and `__getattr__`-only attributes: Do you
>         get the
>         attribute at the start of the block, or do you call `__getattr__`
>         every time?
>              * That `d = 1` is Pythonically odd if it works as in the
>         original example.
>
>
>     Sidenote: the idea I posed is actually borrowed from a language i
>     used to use, Visual Foxpro, where it was implemented using the
>     'with' keyword.
>
>     Your proposal has the need to duplicate all variables, so instead
>     of multiple times typing "self." you have to type them double in
>     the line using "with" so it's shorter but not optimally short.
>     Also if you want the accompanying faster opcodes that means you
>     have to put 4 variables on the stack straight away for fast
>     access, instead of one.
>
>     To answer you questions:
>     - No it would not add scope, it's just a combination of
>     syntactical sugar combined with faster opcodes.
>     - The attributes are not grabbed at the beginning of the block,
>     instead internally in memory there's a 'grabbed object' stack that
>     can be accessed directly without the LOAD_FAST opcode
>     - Your fourth remarks refers to your non-dotted code. I think the
>     ".d = 1" statement feels pythonic but again maybe because I was so
>     used to the syntax in the VFP language
>
>
>     _______________________________________________
>     Python-ideas mailing list
>     Python-ideas at python.org <mailto:Python-ideas at python.org>
>     https://mail.python.org/mailman/listinfo/python-ideas
>     Code of Conduct: http://python.org/psf/codeofconduct/
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160502/a5b0477d/attachment.html>


More information about the Python-ideas mailing list