Объясните этот код
Задача с 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)
Здесь выполняются следующие шаги:
- Создаётся объект класса
addсо значением1(метод__init__наследуется отint) - У объекта вызывается метод
__call__с параметром2 - Метод
__call__возвращает новый объект со значением1 + 2 = 3 - Всё повторяется со 2-ого шага и получается
1 + 2 + 3 + 4 + 5 = 15