fortissimus23
@fortissimus23

Как преобразовать строку в функцию?

Есть функция:
def next(message):
  bot.send_message(message.from_user.id,'№' + str(message.text),reply_markup = back_btn_reply_markup)


Как вместо next просто использовать callback_data.data (для вызова функции next)?
@bot.callback_query_handler(func=lambda c: True)
def callback_inline(callback_data):
if callback_data.data == 'next':
        user_last_message = user_last_messages[callback_data.from_user.id]
        user_last_message.text = str(int(user_last_message.text) + 1)
        bot_sent_message = next(user_last_message)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@MechanicZelenyy
То что вы хотите выглядит так:
eval("{}(user_last_message)".format(callback_data.data))


Однако никогда так не делайте, это гигантская дыра в безопасности.

Если все рано хочется, то вы можете воспользоваться тем что в питоне все является объектом и вы можете через специальные методы вызвать функцию как атрибут модуля.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Если функция next определена в том же модуле, где callback_inline, то

globals()[callback_data.data](user_last_message)

Если в импортированном модуле, например с именем example, то

getattr(example, callback_data.data)(user_last_message)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 140 000 до 180 000 руб.
Marilyn Москва
от 80 000 до 110 000 руб.
Константа Москва
от 140 000 до 180 000 руб.