我在python中使用mongoengine作为ORM。现在我有一种情况,我有一个类,实际上是一个模型,形式:
from mongoengine import *
class SomeDetails(Document):
alias = StringField(required=True)
version = StringField(required=True)
author = StringField(required=True)
someName = StringField(required=True)
现在我需要创建这个类的对象(因此在运行时创建一个文档)
我可以在运行时使用 inspection 创建一个普通类的对象,如下所示:
from inspect import isclass
# moduleImport is a method made to facilitate importing of modules at runtime.
new_module = moduleImport('myModule')
classes = [x for x in dir(new_module) if isclass(getattr(new_module, x))]
class_object = getattr(new_module, classes[0])
instance = class_object()
以上工作完美无缺。我能够在运行时创建一个对象,然后按照我的意愿使用它。
但是,在前面的情况中,当我需要创建一个对象(或者在这种情况下实际上是一个mongo文档)时,根据mongoengine文档here和here,我需要创建对象是这样的:
docObject = SomeDetails(alias=value, version=value, author=value, someName=value)
docObject.save() # to save the document in the mongodb
其中我需要在创建类的对象时为每个关键字参数指定值,以便成功保存文档。
所以在这种情况下,如果我尝试在运行时创建 SomeDetails 类的对象(如上面的 inspect 示例所示),我该如何提供这些关键字参数在创建对象的运行时?
一个重要的问题
因此,关键字参数也不为人知。它们也是在运行时获取的。在运行时,在创建对象之前,是的,我知道关键字args及其值的列表,我可以将其作为字典使用:
{alias:"a", version:"b", author:"c", someName:"d"}
但即便如此,这个dic本身只能在运行时使用。
答案 0 :(得分:1)
你可以试试这个:
data = {alias:"a", version:"b", author:"c", someName:"d"}
instance = class_object(**data)
更多关于** kwargs here
答案 1 :(得分:0)
据推测,你只需要替换
行instance = class_object()
使用
instance = class_object(alias="a", version="b", author="c", someName="d")
如果这不起作用,请详细说明你得到的错误。