Terry Reedy wrote: > "Mark T" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > | This is interesting: > | > | >>> class Test(object): > | ... def __getattribute__(self,n): > | ... print 'reading',n > | ... return object.__getattribute__(self,n) > | ... def __setattr__(self,n,v): > | ... print 'writing',n,v > | ... return object.__setattr__(self,n,v) > | ... > | >>> x=Test() > | >>> x.a=1; x.b=2; x.c=3 > | writing a 1 > | writing b 2 > | writing c 3 > | >>> x.a=x.b=x.c > | reading c > | writing a 3 > | writing b 3 > | >>> > | > | I wouldn't have expected "a" to be assigned first in a right-to-left > parsing > | order. The result is the same in any case. > > The assignment order is specified in the language reference.
Where? I'm looking at http://docs.python.org/ref/assignment.html right now. > But many never read and those who do can forget. > And even if the coder reads and remembers, a code reader may not have. > Which is why I suggested multiple statements in explicit order when it > really matters. > The current docs define a, b = c, d and a = b, c, d and a, b, c = d as valid assignments, but I can't find the part where a = b = c is defined. Help me out here. It looks as though the real syntax should be something like assignment_stmt ::= (target_list "=")+ expression_list | (target_list "=")+ assignment_stmt regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Recent Ramblings http://holdenweb.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list