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?
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__
.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With