可能(通常是)更好的方式来做我尝试的事情,但我目前正在制作这样的对象列表:
my_list = [MyObject(d**) for d in db.myobjects.find({...})]
这很有效,因为它创建了将我的数据库查询返回的字典对象转换为" MyObjects",添加了一堆类方法和属性。
如果在运行时动态插入类名,我该怎么做?我可以使用eval()
动态创建类,但是如何插入字典对象?
my_list = [eval('FooObject') for d in db.fooobjects.find({...})] # needs kwargs from dicts
任何帮助都会很棒。
答案 0 :(得分:1)
首先,考虑使用globals()
而不是eval()
,特别是如果类字符串来自用户输入。
对于您的实际问题,它的工作原理完全相同 - eval('FooClass')
或globals()['FooClass']
为您提供类本身,它不会实例化它。这意味着你可以通过调用它来实例化它,就像你提前知道它的名字一样:
globals()['FooClass'](**d)