0

也许(通常是)一种更好的方法来做我正在尝试的事情,但我目前正在制作一个这样的对象列表:

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

任何帮助都是极好的。

4

1 回答 1

1

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

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

globals()['FooClass'](**d)
于 2012-08-13T03:45:44.377 回答