Chris Angelico wrote: > On Mon, Sep 23, 2019 at 10:42 AM Andrew Barnert via Python-ideas > python-ideas@python.org wrote: > > > > On Sep 22, 2019, at 02:08, Nutchanon Ninyawee m...@nutchanon.org wrote: > > > > > Link is a language feature that allows multiple > > variable names to always refer to the same underlying object define in a > > namespace. > > For now, if the variable a link with b. I will denote as a >< b or link('a', > > 'b') > > a = 2 > > a >< alpha # link 'a' with 'alpha' > > b = 3 > > print(balpha) # print 9 > > alpha = 3 > > print(ba) # print 27 > > How would this work? I can think of a few options, but they all either > > badly slow > > down every variable use, don’t work with locals, or require >< to be > > handled at > > compile time. Do you have at least a sketch of how this works? > > Since there's nothing in the OP's article about implementation, I'm > going to assume that the OP hasn't actually planned any, and is just > looking at syntax and semantics. So there's plenty of flexibility to > discuss potential implementations. > Currently, Python has a default set of rules for how to interpret the > meaning of a bare name, but you can alter that with "global" and > "nonlocal" declarations. Aliasing could be handled exactly the same > way: at compile time, interpret this name as meaning the same as that > name. It would be more Pythonic to use a keyword rather than the "><" > glyph (even while typing it for that example, my fingers autocorrected > to "<>", which would be syntactically valid but usually meaningless - > a dangerous trap), so let's suppose that we can use the word "alias" > for this. > The trouble is that the "alias-ness" of it needs to be able to be > stored in a namespace somehow. The class example implies that > "program" is an alias for "code" in some way that means that can be > stored in the class's dict, and doesn't interfere with descriptor > protocol for the function (which, I think, implies that it cannot > itself be a descriptor). The same applies to monkeypatching Selenium > (in the given example, I honestly think the original name is better, > but that's just a matter of the example); the alias has to be able to > be stored in the instance's dict, and then looked up. > In some cases, it may be possible to translate "x.y >< z" into > something akin to "type(x).y = property(lambda: z, lambda v: z=v)" > (yes, I know, a lambda function can't assign like that, but this is > compiler magic so it can do what it likes). Unfortunately that would > apply to ALL instances of that type - probably not a problem in the > OP's Selenium example, but a fairly major problem when working with a > generic class (ie where type(x) is type). > Not sure where this leads us, though, as instance properties have been > proposed and rejected before. > ChrisA
Both the symbol "><" and keyword "link" are open for changes. In my idea, the link idea is closer to '=', more than any built-in functions. I see, this symbol '~' also a possible alternative. 'alias' is a good keyword. but, the first thing that comes to my mind is 'bash alias' which is not a very accurate behavior for. ```bash $ a=1 $ alias b='a' $ b=2 $ echo $a # print 1 ``` _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/GWN6ISJGZ6LPH3MWBB33WPMU5BKIQ5MU/ Code of Conduct: http://python.org/psf/codeofconduct/