编程语言 - 在python 创建对象实例过程中,如何将字典对象的key,value分别作为类构造函数的keyword和value?
PHP中文网
PHP中文网 2017-04-17 15:40:23
[Python讨论组]

假设有如下的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)这样的方式创建出实例呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHP中文网

核心方法是通过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"
阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号