【发布时间】:2016-01-19 13:43:52
【问题描述】:
我有一个来自 MongoDB find() 查询的游标对象。这本质上是一个由多个字典条目组成的可迭代对象。
我想遍历光标,依次获取每个字典并将其转换为特定的类实例,其类型在字典内部定义为键(即 dict['class_type']=' 形式类类型')。 我想创建变量来引用这些新的类实例,其名称由另一个字典键定义,即 dict['variable_name'] = 'name'。这些名称将是唯一的。
到目前为止,我已经尝试了以下方法:
def mongo_query_to_variable(mongo_query):
for obj in mongo_query:
class_type = obj['class_type']
var_name = obj[key_for_var_name]
exec(var_name + '=' + class_type + '(**obj)', globals())
当我在 shell 中逐行实现它时,这段代码似乎可以工作,但当我尝试将它用作函数时却不行。我得到了错误:
NameError: name 'class_type' is not defined
我知道最好尽量避免使用 eval/exec,但我不确定我还能如何使用 class_type 字符串动态选择类类型。最后一行基本上是试图从这个类似的问题中复制已接受的答案(第二部分),但使用动态变量和类名:Convert Python dict to object?。进入类 init 的部分代码包含在基类中并被继承。
我在那里有全局,因为查询将是可变长度的,我不确定如何返回动态数量的变量并为它们分配在函数中定义的名称。我听说最好避免全局,那么有没有更好的方法将类实例分配给变量?
感谢任何建议;我对编程很陌生,我知道我可能以错误的方式处理这个问题。
干杯
【问题讨论】:
-
您的示例中的缩进有点偏离,您能否在发布问题时确认其唯一的复制粘贴错误?缩进在 Python 中很重要。干杯。
-
很好发现 Wan,是的,这是一个复制和粘贴错误,原始代码中不存在。已编辑。
标签: python mongodb class cursor instance