On 06/28/2010 10:13 PM, Emile van Sebille wrote: > On 6/28/2010 12:02 PM Benjamin Kaplan said... >> Just to save the OP some trouble later on: this optimization is done >> for most of the __*__ methods. Overriding __add__ on an instance won't >> change the behavior of a + b. > > ActivePython 2.4.1 Build 247 (ActiveState Corp.) based on > Python 2.4.1 (#65, Jun 20 2005, 17:01:55) [MSC v.1310 32 bit (Intel)] on > win32 > Type "help", "copyright", "credits" or "license" for more information. >>>> class Test: pass > ... >>>> i = Test() >>>> i+1 > Traceback (most recent call last): > File "<stdin>", line 1, in ? > TypeError: unsupported operand type(s) for +: 'instance' and 'int' >>>> def __add__(self): return 6 > ... >>>> i.__add__ = __add__ >>>> i+1 > 6 >>>> > > Was this in reference to a specific python version?
ahem Python 2.5.5 (r255:77872, Apr 21 2010, 08:40:04) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class A(object): ... def __add__(self, other): ... return "indeed" ... >>> a = A() >>> a + 1 'indeed' >>> def new__add__(other): ... return "not at all" ... >>> a.__add__ = new__add__ >>> a.__add__(1) 'not at all' >>> a+1 'indeed' >>> >>> >>> class B: ... def __add__(self, other): ... return 'now this is old-style' ... >>> b = B() >>> b+1 'now this is old-style' >>> b.__add__ = new__add__ >>> b+1 'not at all' >>> I hate the fact that Python 2.x has two types of classes. Good riddance. -- Thomas -- http://mail.python.org/mailman/listinfo/python-list