リストから 1000 以上のクラスを生成する必要があります。
1) 私の場合、私のリストはユーザー指定ではありません。コンテンツは信頼できます。リスト コンテンツは自分で作成します。したがって、セキュリティ リスクを導入することなく eval() を使用できます。ただし、 entry = eval(c_class)() を実行する代替方法があるかどうかを知りたい
2) エントリ変数を再利用する代わりに、class_list_names から変数名を作成したいと考えています。すなわち: rak_entry = rak() ... bak_entry = bak() .
exec("entry_"+c_class +" = eval(c_class)()")
eval で exec を使用する以外の方法はありますか?
これが私のコードです
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
よろしく