Search code examples
pythonclassoverloadingadditionoperator-keyword

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:

class A:
    def __add__(self, b):
        return something

I know how to add this so far:

a = A()
print(a + 1)

But, what if I want to add it like this?

a = A()
print(a + 1 + 2)

Should I use *args for the add class method?


Solution

  • 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:

    >>> class A:
    ...     def __init__(self, val):
    ...         self.val = val
    ...     def __repr__(self):
    ...         return f'<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)>