R
Raj Bandyopadhyay
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
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