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)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?