在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)这样的方式创建出实例呢?
小小小小小纸团
9 years, 4 months ago
Answers
核心方法是通过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 9 years, 4 months ago