[Python-ideas] Quick idea: defining variables from functions that take the variable name

Sven R. Kunze srkunze at mail.de
Wed Jun 1 11:10:47 EDT 2016

On 01.06.2016 16:06, Paul Moore wrote:
> I'm not sure I follow this proposal. Could you explain a little please?
> Given
>      x = Symbol('x')
> as the current approach, how would you modify that to work with your
> proposal? If you could show how you'd write a wrapper function
> AutoSymbol, so that
>      x = AutoSymbol()
> did the same as the above, that'd help me a lot.
> Thanks,
> Paul

Okay, let's see.

class Symbol:
     def __init__(self, name):
         self.name = name # that's me :)

That's the current way. If now, the compiler would assign "x" to a 
special dunder attribute/variable, that would allow __init__ to extract 
that name and use it as if it were a parameter:

class AutoSymbol:
     def __init__(self):
         self.name = __assigned_name__ # that's me :)

That's just it. I consider __assigned_name__ the same as __module__. A 
special variable available if you need it.

A two-step approach like the following would also be possible:

class AutoSymbol:

     def __init__(self):
         pass # no name available :(

     def __name__(self, name):
         self.name = name  # that's me

In this case, name is not available in the constructor which could be 
regarded as a drawback. A advantage would be possible optimization. No 
__name__ member, no implicit call of __name__

On the caller site, nothing changes. It's just:

x = AutoSymbol()

Autosymbol either has __assigned_name__ set during constructor execution 
or __name__() will be set later. The same logic could be applied to 
other callables, functions, lambdas, etc.

This post does not really care about the name of the special 
variable/member. It could also be '__lhs__'. I think others will come up 
with better names. In the end, one name needs to be chosen of course. ;-)


More information about the Python-ideas mailing list