Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is __radd__ not working

Tags:

python

HI

Trying to understand how __radd__ works. I have the code

>>> class X(object):
    def __init__(self, x):
        self.x = x
    def __radd__(self, other):
        return X(self.x + other.x)


>>> a = X(5)
>>> b = X(10)
>>> a + b

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    a + b
TypeError: unsupported operand type(s) for +: 'X' and 'X'
>>> b + a

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    b + a
TypeError: unsupported operand type(s) for +: 'X' and 'X'

Why is this not working? What am I doing wrong here?

like image 708
Tim Avatar asked Nov 28 '10 18:11

Tim


2 Answers

Python docs for operators

"These functions are only called if the left operand does not support the corresponding operation and the operands are of different types."

See also Footnote 2

Since the operands are of the same type, you need to define __add__.

like image 183
Adam Vandenberg Avatar answered Nov 04 '22 06:11

Adam Vandenberg


These functions are only called if the left operand does not support the corresponding operation and the operands are of different types.

I am using Python3 so please ignore the grammatical differences:

>>> class X:
    def __init__(self,v):
        self.v=v
    def __radd__(self,other):
        return X(self.v+other.v)
>>> class Y:
    def __init__(self,v):
    self.v=v

>>> x=X(2)
>>> y=Y(3)
>>> x+y
Traceback (most recent call last):
  File "<pyshell#120>", line 1, in <module>
    x+y
TypeError: unsupported operand type(s) for +: 'X' and 'Y'
>>> y+x
<__main__.X object at 0x020AD3B0>
>>> z=y+x
>>> z.v
5
like image 40
Kabie Avatar answered Nov 04 '22 06:11

Kabie