sturlamolden <sturlamol...@yahoo.no> writes: > What? Take a look at the code again: > > mytuple[0] += 1 > > should never attempt an __iadd__ on mytuple. > > A sane parser would see this as: > > tmp = mytuple.__getitem__(0) > tmp = tmp.__iadd__(1) > mytuple.__setitem__(0, tmp) # should this always raise an exception?
What do you mean by "a sane parser"? This is exactly what happens in current Python. Since tuple's __setitem__ always raises an exception (and that is by design and not likely to change), everything is sane. Saner (in this respect) behavior in the tuple example would require a different protocol. I don't understand why Python doesn't just call __iadd__ for side effect if it exists. The decision to also rebind the result of __i*__ methods continues to baffle me. I guess it is a result of a desire to enable the __i*__ methods to punt and return a different instance after all, but if so, that design decision brings more problems than benefits. -- http://mail.python.org/mailman/listinfo/python-list