How to Write a Chain Adding Function in Python


The challenge

We want to create a function that will add numbers together when called in succession.

add(1)(2);
# returns 3

We also want to be able to continue to add numbers to our chain.

add(1)(2)(3) # 6
add(1)(2)(3)(4) # 10
add(1)(2)(3)(4)(5) # 15

and so on.

A single call should return the number passed in.

add(1); # 1

We should be able to store the returned values and reuse them.

addTwo = add(2)
addTwo # 2
addTwo + 5 # 7
addTwo(3) # 5
addTwo(3)(5) # 10

We can assume any number being passed in will be valid whole number.

Test cases

test.assert_equals(add(1), 1)
test.assert_equals(add(1)(2), 3)
test.assert_equals(add(1)(2)(3), 6)

How to write the code

class add(int):
    def __call__(self, n):
        return add(self + n)