Цепочка нескольких аргументов класса (пробовал много способов)

Как мне инициализировать несколько аргументов класса, которые пришли в виде цепочки, а затем вычислить их сумму?

Я пробовал много способов, но НИЧЕГО

Есть ли у вас какие-либо идеи?

>>> Chain(2.5)(2)(2)(2.5) # sum
9

>>> Chain(3)(1.5)(2)(3) # sum
9.5

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 16.02.2023 18:17

Что это за класс Chain, который вы используете?

Blue Robin 16.02.2023 18:18

Пожалуйста отредактируйте свой пост и покажите свой код.

MattDMo 16.02.2023 18:18

Пожалуйста, обновите свой вопрос с помощью этих "tried many ways".

quamrana 16.02.2023 18:19

Я бы не стал писать такой код с самого начала. Просто принимайте произвольные аргументы и перебирайте их внутри вызываемого объекта.

chepner 16.02.2023 18:19

Цепь - это класс, который я должен завершить, чтобы вычислить сумму аргументов.

Harez 16.02.2023 18:21

Вы можете сделать Chain класс с __call__ методом, чтобы вызов экземпляра всегда создавал другой Chain экземпляр. Но тогда вам нужен дополнительный метод для преобразования «конечного» экземпляра в int, например Chain(2.5)(2)(2)(2.5).result().

chepner 16.02.2023 18:21

Если все, что вы хотите сделать, это взять сумму вещей, то почему бы просто не написать sum([2.5, 2, 2, 2.5])? Что в этом плохого?

Abdul Aziz Barkat 16.02.2023 18:21

Это вопрос, который я видел в Интернете.

Harez 16.02.2023 18:25
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
2
9
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В общем, вы захотите добавить в свой класс метод __call__, чтобы вызов экземпляра возвращал новый экземпляр. Ваш класс также должен подклассировать тип, соответствующий желаемому результату.

В этом конкретном случае новый экземпляр может, например, поддерживать текущую сумму начального значения и всех последовательных аргументов.

class Chain(float):
    def __call__(self, x):
        return Chain(self + x)

Затем

>>> Chain(2.5)
2.5
>>> Chain(2.5)(2)
4.5
>>> Chain(2.5)(2)(2)
6.5
>>> Chain(2.5)(2)(2)(2.5)
9.0

Другие вопросы по теме