将kwargs传递给动态实例化的Python类

时间:2012-08-13 03:41:18

标签: python class eval

可能(通常是)更好的方式来做我尝试的事情,但我目前正在制作这样的对象列表:

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

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

首先,考虑使用globals()而不是eval(),特别是如果类字符串来自用户输入。

对于您的实际问题,它的工作原理完全相同 - eval('FooClass')globals()['FooClass']为您提供类本身,它不会实例化它。这意味着你可以通过调用它来实例化它,就像你提前知道它的名字一样:

globals()['FooClass'](**d)