@FCKJesus

Как задать глобальное динамическое имя переменной?

Есть бот в телеграмме, с помощью которого можно удаленно запускать selenium и выполнять какой либо функционал, но если этим ботом воспользуется другой юзер, то все ломается, единственным решением нашел присваивать каждому экземпляру уникальное имя

Единственное условие экземпляр должен быть глобальной видимости
@dp.message_handler(lambda message: message.text == "Авторизоваться")
async def login(message: types.Message):
	user_id = message.from_user
	ozon_user = 'ozon_user_{0}'.format(user_id['id'])
	globals()[ozon_user] = browser.OzonBrowser(user_id['id'])
	markup = types.ReplyKeyboardRemove()
	await Form.login.set()
	await message.reply("Укажи логин для входа начиная 9", reply_markup=markup)


На выходе ожидал несколько экземпляров класса OzonBrowser с названием переменной формата ozon_user_82763478, ozon_user_514189124 и т.д.
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@antares4045
вообще то кусок кода из вопроса полностью валиден и строчка
globals()[VariableName] = VariableValue
действительно создаёт глобальную переменную -- если у вас не работает, то вы не там ищете.

Но, присоединюсь к Сергею: лучше создайте глобальный словарь и складывайте в него.

ozonBrowsers = dict()
@dp.message_handler(lambda message: message.text == "Авторизоваться")
async def login(message: types.Message):
  user_id = message.from_user
  ozon_user = 'ozon_user_{0}'.format(user_id['id'])
  ozonBrowsers[ozon_user ] = browser.OzonBrowser(user_id['id'])
  markup = types.ReplyKeyboardRemove()
  await Form.login.set()
  await message.reply("Укажи логин для входа начиная 9", reply_markup=markup)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Словарь.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы