Интеллектуальный Сумматор

Унаследуйте вызываемый объект от int и возвращайте новый экземпляр при каждом вызове. Так прежние суммы остаются переиспользуемыми; sum_two * 10 равно 20, не 1824.

Короткий ответ

Что ответить на собеседовании

Унаследуйте вызываемый объект от int и возвращайте новый экземпляр при каждом вызове. Так прежние суммы остаются переиспользуемыми; sum_two * 10 равно 20, не 1824.

Подробный разбор

Ответ с пояснениями

Условие

Создайте вызываемый объект sum_numbers(), который аккумулирует целочисленные значения при последовательных вызовах.

Пример 1:

print(sum_numbers(1))

Вывод: 1

Пример 2:

print(sum_numbers(1)(2))

Вывод: 3

Количество цепочек вызовов не ограничено:

Пример 3:

print(sum_numbers(1)(2)(3))

Вывод: 6

Пример 4:

print(sum_numbers(1)(2)(3)(4))

Вывод: 10

Пример 5:

print(sum_numbers(1)(2)(3)(4)(5))

Вывод: 15

Объект, возвращаемый sum_numbers(), должен оставаться переиспользуемым:

Пример 6:

sum_two = sum_numbers(2)
print(sum_two)

Вывод: 2

Пример 7:

print(sum_two + 5)

Вывод: 7

Пример 8:

print(sum_two(3))

Вывод: 5

Пример 9:

print(sum_two(3)(5))

Вывод: 10

Пример 10:

print(sum_two * 10)

Вывод: 1824

Требуется реализовать объект, поддерживающий как цепочку вызовов, так и обычные арифметические операции (сложение, умножение) с последующим выводом текущей суммы.

Ответ

Унаследуйте вызываемый объект от int и возвращайте новый экземпляр при каждом вызове. Так прежние суммы остаются переиспользуемыми; sum_two * 10 равно 20, не 1824.

class SumNumber(int):
    def __call__(self, value):
        if type(value) is not int:
            raise TypeError('Ожидалось целое число')
        return SumNumber(int(self) + value)

def sum_numbers(value):
    if type(value) is not int:
        raise TypeError('Ожидалось целое число')
    return SumNumber(value)

sum_numbers(1)(2)(3) печатается как 6. Объект sum_two=sum_numbers(2) не меняется после sum_two(3), поэтому независимая цепочка sum_two(3)(5) даёт 10, а обычные sum_two+5 и sum_two*10 — 7 и 20. Число 1824 в последнем примере противоречит обычному умножению и является ошибкой условия.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее