On 13.06.2005, at 15:52, Xavier Décoret wrote: > I would like to know if there is for python's classes an equivalent of > the operator= that can be overidden. > > Let's say I have >>>> a=A() > and I want to write >>>> a=5 > and I want this to change some internal value of a instead of making a > point to a new object (an int 5) > > In other word, I would like to be able to use a=5 instead of a.set(5) > > Is that possible?
the short answer is: no. the long answer: if you write >>> a=A() an instance of class A is created and bound to the local identifier 'a'. If you later write >>> a=5 the object 5 is reassigned to the same identifier, deleting whatever value was stored there before. The identifier itself does not impose any restrictions on the type of instances that can be bound to it. Binding an instance of class A in the first part, does not make the identifier of the kind 'can-only-bind-A-instances'. In other words: identifiers don't have types. Thus, there is no mechanism that allows to change the binding behavior of identifiers. As a general advise, don't try to write C++ in python. I think, for most cases, there are far better solutions than changing the assign operator anyway... explicit is better than implicit: If class A has only one dedicate value and no internal state, make it a construcotr call: >>> a=A(5) Otherwise, it is worth mentioning the name of the member to set. IMHO this increases the readability of your source code: >>> a.pressure=5 Cheers, - harold - -- "I was born not knowing and have had only a little time to change that here and there." -- Richard Feynman -- http://mail.python.org/mailman/listinfo/python-list