Как правильно создать переменные класса из списка?
Сейчас создаю класс с переменными следующим образом:
from aiogram.dispatcher.filters.state import StatesGroup, State
class States(StatesGroup):
State1 = State()
State2 = State()
State3 = State()
В целевом варианте количество и названия переменных будут меняться и храниться в БД. При запуске приложения я получаю из БД новый список переменных, например:
StateList = ['State1', 'State2', 'State3']
В результате должны быть созданы переменные State1, State2, State3. Какие есть варианты создания без использования eval()?
Ответы (1 шт):
Автор решения: vadim vaduxa
→ Ссылка
Например используя setattr.
test2.py:
class State:
pass
test1.py:
import test2
class States:
pass
ds = set(dir(States))
StateList = ['State1', 'State2', 'State3']
for s in StateList:
setattr(States, s, test2.State()) # States.State1 = State()
for s in set(dir(States)) - ds:
print(s, getattr(States, s))
out:
State3 <test2.State object at 0x0000028673C61AF0>
State2 <test2.State object at 0x0000028663538250>
State1 <test2.State object at 0x00000286635E2340>