variable declaration

Nick Coghlan ncoghlan at iinet.net.au
Sat Feb 5 21:41:06 EST 2005


Alex Martelli wrote:
> It's not clear to me what semantics, exactly, x.y := z would be defined
> to have (assuming := is the syntax sugar for ``rebinding'').  Perhaps,
> by analogy with every other augmented operator, it should be equivalent
> to:
> 
>     _temp = x.y
>     x.y = type(temp).__irebind__(temp, z)
> 
> This makes it crystal-clear what happens when type(x).y is a descriptor
> with/without __set__ and __get__, when type(x) defines __getattribute__
> or __setattr__, etc, etc.  Giving type object an __irebind__ which just
> returns the second operand would complete the semantics.  Of course,
> doing it this way would open the issue of types overriding __irebind__,
> and it's not clear to me that this is intended, or desirable.  So, maybe
> some other semantics should be the definition.  But since "rebinding" is
> not a primitive, the semantics do need to be somehow defined in terms of
> elementary operations of getting and setting (of attributes, items, &c).

I was thinking of something simpler:

   x.y
   x.y = z

That is, before the assignment attempt, x.y has to resolve to *something*, but 
the interpreter isn't particularly fussy about what that something is.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at email.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.skystorm.net



More information about the Python-list mailing list