我有一个类似这样的类:
class User:
def __init__(self, uid):
userinfo = json.load(urlopen(passportapi + 'user/' + uid))
这个类会从远程API中加载用户信息,并设置相应的属性,所以我可以通过以下方式访问这些属性:
print user.username
print user.group_id
有没有实现这个的方法?谢谢。
我有一个类似这样的类:
class User:
def __init__(self, uid):
userinfo = json.load(urlopen(passportapi + 'user/' + uid))
这个类会从远程API中加载用户信息,并设置相应的属性,所以我可以通过以下方式访问这些属性:
print user.username
print user.group_id
import json
api_result = '{"username":"wawa","age":20}'
class User(object):
def __init__(self, api_result):
userinfo = json.loads(api_result)
self.__dict__.update(userinfo)
import unittest
class DefaultTestCase(unittest.TestCase):
def test_default(self):
user = User(api_result)
self.assertEqual(user.username, 'wawa')
self.assertEqual(user.age, 20)
if __name__ == '__main__':
unittest.main()
setattr
函数来完成这种操作:>>> class A(object):
pass
>>> a = A()
>>> setattr(a, 'val', 4)
>>> a.val
4
在您的情况下,假设您解析的JSON文件提供了一些键值对(例如字典),您可以通过这些进行迭代,并在self
上调用setattr
;类似于以下内容(假设userinfo
是一个字典):
class User:
def __init__(self, uid):
userinfo = json.load(urlopen(passportapi + 'user/' + uid))
for key, value in userinfo.iteritems():
setattr(self, key, value)
class User:
def __init__(self, uid):
self.__dict__.update(json.load(urlopen(passportapi + 'user/' + uid)))
class User(object):
def __init__(self, api_result):
self.userinfo = json.loads(api_result)
def __getattr__(self, name):
if name in self.userinfo: return self.userinfo[name]
raise AttributeError
我认为这种方法可以让您做其他事情,比如过滤特定的关键词并针对访问数据引发自定义异常。
print vars(user)['username']
你可以用任何你想要访问的属性名称来替换 'username' - undefined