• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

博客园    首页    新随笔    联系   管理    订阅  订阅
字典转对象
 1 class DictToObject(dict):
 2     '''字典转对象'''
 3     def __init__(self,*args,**kwargs):
 4         super().__init__(*args,**kwargs)
 5         #先调用父类的构造方法,因为传进来的是一个字典,dict这个类会把你传入的{k:v}这样的变成一个dict的类
 6 
 7     def __getattr__(self, item):
 8         #__getattr__的作用是通过x.xx的时候它会自动调用__getattr__这个方法,把你要获取的属性的key传过来
 9         #比如说 user.name ,它就是调用了__getattr__,把name传给__getattr__函数,然后返回这个name的值
10         value = self[item]
11         if isinstance(value,dict):
12             value = DictToObject(value)#如果是字典类型,直接返回DictToObject这个类的对象
13 
14         elif isinstance(value,list) or isinstance(value,tuple):
15             #如果是list,循环list判断里面的元素,如果里面的元素是字典,那么就把字典转成DictToObject的对象
16             value = list(value)
17             for index,obj in enumerate(value):
18                 if isinstance(obj,dict):
19                     value[index] = DictToObject(obj)
20         return value
21 
22 if __name__ == '__main__':
23     person = {'name':'xiaohei',
24               'sex':'male',
25               'addr':'beijing',
26               'car':[{'country':'china','brand':'byd'},{'country':'jp','brand':'nissan'}],
27               'money':{'financial':5000,'salary':6000,'stock':7000}
28               }
29     p_obj = DictToObject(person)
30     print(p_obj.name)
31     print(p_obj.sex)
32     print(p_obj.money.stock)
33     # print(p_obj.car[0].brand)
34     # print(p_obj.car[0].country)
35     # print(p_obj.car[1].country)

 

posted on 2020-07-29 15:45  搁浅小夕  阅读(103)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3