Объясните этот код

Задача с Codewars. Нужно написать программу, которая будет складывать числа вместе при последовательном вызове.

Пример:

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

Я сам не смог решить, полез в ответы и увидел это:

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

...и ничего не понял. Объясните, пожалуйста.


Ответы (1 шт):

Автор решения: timur

У вас объявляется класс add, который наследуется от int. Метод __call__ вызывается, когда вы пишете после него скобки и возвращает такой же объект, только который хранит число на n больше.

Допустим вот строка:

add(1)(2)(3)(4)(5)

Здесь выполняются следующие шаги:

  1. Создаётся объект класса add со значением 1 (метод __init__ наследуется от int)
  2. У объекта вызывается метод __call__ с параметром 2
  3. Метод __call__ возвращает новый объект со значением 1 + 2 = 3
  4. Всё повторяется со 2-ого шага и получается 1 + 2 + 3 + 4 + 5 = 15
→ Ссылка