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


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

python 编程语言 开发

小小小小小纸团 8 years, 8 months ago

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

a-kano answered 8 years, 8 months ago

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

R.P.Y.U answered 8 years, 8 months ago

Your Answer