Question about overloading of binary operators
Dan Bishop
danb_83 at yahoo.com
Mon Mar 31 21:56:07 EDT 2008
On Mar 31, 5:03 pm, gigs <g... at hi.t-com.hr> wrote:
> Raj Bandyopadhyay wrote:
> > 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
>
> i think that you need to use __radd__ for addition with custom object on right
Right. Python doesn't make any assumptions that addition is
commutative.
But if it is for your class, you can just write
__radd__ = __add__
More information about the Python-list
mailing list