Emile van Sebille <em...@fenx.com> writes: > On 10/23/2010 11:51 AM Arnaud Delobelle said... >> >> Can you change the value of a.x? >> >> (Hint: my shortest solution is of the form A.*.*[*].*[*].x = 3) > > A.x,a.x = a.x,3
I knew that was going to come next! That'll teach me not to specify the problem precisely :) The challenge is to actually change the value of the private 'x', so that 'a.x' will evaluate to 3 with neither 'A' nor 'a' being tampered with. Changing 'A.x' breaks every instance of 'A': >>> a, b = A(2), A(40) >>> A.x, a.x = a.x, 3 >>> b.x 3 So it is not a very robust solution :) It is possible to do this: >>> a, b = A(2), A(40) >>> [some expression] = 3 >>> a.x, b.x (3, 40) >>> a.__class__ == b.__class__ == A True Everything works as before, only the private 'x' of 'a' has been changed to 3. I wanted to illustrate that it is very difficult (impossible?) to hide objects in Python. -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list