我需要从列表中生成 1000 多个类。
1)就我而言,我的列表不是用户指定的。内容可以信任,我自己构建列表内容。因此我可以使用 eval() 而不引入安全风险。但是,我想知道是否有其他方法可以执行 entry = eval(c_class)()
2) 我不想重新使用入口变量,而是想从 class_list_names 构建变量名称。即: 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
问候