Question about overloading of binary operators
Raj Bandyopadhyay
rajb at rice.edu
Mon Mar 31 16:57:05 EDT 2008
Hi
Here's a simple class example I've defined
#############################
class myInt(int):
def __add__(self,other):
return 0
print 5 + myInt(4) #prints 9
print myInt(4) + 5 #prints 0
#############################
The Python binary operation function (binary_op1() in
Objects/abstract.c) states
the rules for binary operations as follows:
v w Action
-------------------------------------------------------------------
new new w.op(v,w)[*], v.op(v,w), w.op(v,w)
new old v.op(v,w), coerce(v,w), v.op(v,w)
old new w.op(v,w), coerce(v,w), v.op(v,w)
old old coerce(v,w), v.op(v,w)
[*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
v->ob_type
It seems that my example should fall in case 1, and in both cases, the
__add__ function of the subclass should be used, returning 0, regardless
of operand order. However, in one case the subclass's function is used
and not in the other case. What am I missing here?
Thanks
Raj
More information about the Python-list
mailing list