Skip to content Skip to sidebar Skip to footer

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"