在python 创建对象实例过程中,如何将字典对象的key,value分别作为类构造函数的keyword和value?

发布于 2022-09-01 16:28:35 字数 628 浏览 16 评论 0

假设有如下的json数据, name为需要创建实例的class的名字,arguments为 class的构造函数的参数.

{
    "name": "Student"
    "arguments":
        [
            {"name": "Bob"},
            {"age": 14}
        ]
}

同时有个class如下

class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age

同时再加一个限制条件, class 为第三方定义出来的,并且不同class的构造函数,参数个数都无法预知.程序能够利用的只有json格式的参数.
从json数据转到python对象可以用json模块来实现,那提取到的参数怎么才能够通过Student(keyword=argument)这样的方式创建出实例呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

_失温 2022-09-08 16:28:35

核心方法是通过globals()获取类对象并创建实例

import json

class Student(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age


if __name__ == '__main__':

    jstr = '''
    {
    "name": "Student" ,
    "arguments": 
        [
            {"name": "Bob"},
            {"age": 14}
        ]
    }'''
    try:
        obj = json.loads(jstr)
        param = {}

        # merge dict
        for v in obj['arguments']:
            param = dict(v.items()+param.items())

        # create object
        res = globals()[obj['name']](**param)
        print res.get_name()
        print res.get_age()
    except (ValueError, KeyError, TypeError):
        print "JSON format error"
爱*していゐ 2022-09-08 16:28:35

看看这个会不会对你有帮助: Python描述器引导

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文