在 python 的运行时创建具有关键字参数的 class 的对象

creating object of a class that has keyword arguments at runtime in python

我在 python 中使用 mongo 引擎作为 ORM。现在我有一个 class,实际上是一个模型,形式为:

from mongoengine import *
class SomeDetails(Document):
    alias = StringField(required=True)
    version = StringField(required=True)
    author = StringField(required=True)
    someName = StringField(required=True)

现在我需要创建这个 class 的对象(因此在运行时创建一个文档)

我可以在运行时使用 inspection 创建一个正常 class 的对象,像这样:

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 文档)时,根据 mongo 引擎文档 here and here ,我需要创建这样的对象:

docObject = SomeDetails(alias=value, version=value, author=value, someName=value)
docObject.save() # to save the document in the mongodb

其中我需要在创建 class 的对象时为每个关键字参数指定值,以便成功保存文档。

所以在这种情况下,如果我尝试在运行时创建 SomeDetails class 的对象(如 inspect 上面的示例)如何在创建对象时在运行时提供这些关键字参数?

重要收获

So the keyword arguments are also not known before hand. They too are fetched at runtime. At runtime, before object creation, yes, I do know the list of keyword args and it's values, which is available to me as a dictionary as :

{alias:"a", version:"b", author:"c", someName:"d"}

但即便如此,这个 dic 本身也只能在运行时使用。

据推测,您只需替换行

instance = class_object()

instance = class_object(alias="a", version="b", author="c", someName="d")

如果这不起作用,请详细说明您遇到的错误。

你可以试试这个:

data = {alias:"a", version:"b", author:"c", someName:"d"}
instance = class_object(**data)

更多关于 **kwargs here