Мне нужно сгенерировать 1000 классов из списка.Объявление динамического класса с использованием переменной для обозначения класса и ссылки на переменные для динамического класса
1) В моем случае мой список: NOT пользователь указал. Контент можно доверять, я сам создаю содержимое списка. Поэтому я могу использовать eval() без риска для безопасности. Тем не менее, я хотел бы знать, есть ли альтернативные способы ввода entry = eval (c_class)()
2) Вместо повторного использования переменной ввода я хотел бы построить имена переменных из class_list_names. I.e .: rak_entry = rak() ... bak_entry = bak().
exec("entry_"+c_class +" = eval(c_class)()")
Существуют ли другие способы, чем использовать Exec с Eval?
Вот мой код
class_list_names = ['rak', 'bak', 'sak', 'mak']
class pattern_class(object):
generic_attr = "bla"
def declare(classname):
globals()[classname] = type(classname, (pattern_class,), {'__tablename__' : classname+"_daily_history"})
for c_class in class_list_names:
declare(c_class)
entry = eval(c_class)()
print(entry)
print(entry.__tablename__)
print(entry.generic_attr)
выход
<__main__.rak object at 0x0242D950>
rak_daily_history
bla
<__main__.bak object at 0x0242DA10>
bak_daily_history
bla
<__main__.sak object at 0x0242D9B0>
sak_daily_history
bla
<__main__.mak object at 0x0242D950>
mak_daily_history
bla
С уважением
Почему вы не используете 'globals() [c_class]()', как вы это делали в 'declare'? – falsetru
Или вы можете заставить 'declare' возвращать сгенерированный объект класса, а затем использовать его. – falsetru