Using __add__ Operator With Multiple Arguments In Python
I am trying to add a class object with a number, but I'm confused on how to go about adding a class object with two numbers. For example, this is my hypothetical add class method:
Solution 1:
No, you can't use multiple arguments. Python executes each +
operator separately, the two +
operators are distinct expressions.
For your example, object + 1 + 2
really is (object + 1) + 2
. If (object + 1)
produces an object that has an __add__
method, then Python will call that method for the second operator.
You could, for example, return another instance of A
here:
>>>classA:...def__init__(self, val):... self.val = val...def__repr__(self):...returnf'<A({self.val})>'...def__add__(self, other):...print(f'Summing {self} + {other}')...return A(self.val + other)...>>>A(42) + 10
Summing A(42) + 10
<A(52)>
>>>A(42) + 10 + 100
Summing A(42) + 10
Summing A(52) + 100
<A(152)>
Solution 2:
You would want your return value to be an object itself, that also supports the add operation, e.g.:
classA:def__init__(self, value=0):
self.value = value
def__add__(self, b):
return A(self.value + b)
def__str__(self):
return str(self.value)
a = A()
print(a + 1 + 2)
Output:
3
Solution 3:
It perfectly works even with multiple values since each add only adds two values (see the multiple + signs when you ad multiple values):
classA:def__init__(self, value):
self.a = value
def__add__(self, another_value):
returnself.a + another_value
a = A(1)
print(a+1+1)
Solution 4:
you could always just do this:
>>>classA:...def__init__(self, val):... self.val = val...def__repr__(self):...returnf'<A({self.val})>'...def__add__(self, other):...print(f'Summing {self} + {other}')...return A(self.val + other)...>>>A(42) + 10
Summing A(42) + 10
<A(52)>
>>>A(42) + 10 + 100
Summing A(42) + 10
Summing A(52) + 100
<A(152)>>>> class A:
...def__init__(self, val):... self.val = val...def__repr__(self):...returnf'<A({self.val})>'...def__add__(self, other):...print(f'Summing {self} + {other}')...return A(self.val + other)...>>>A(42) + 10
Summing A(42) + 10
<A(52)>
>>>A(42) + 10 + 100
Summing A(42) + 10
Summing A(52) + 100
<A(152)>
Post a Comment for "Using __add__ Operator With Multiple Arguments In Python"