Python 类---魔法方法
定义:
- 一个类里面有一些特殊作用的方法,不需要你调用,在一些情况下会自动运行
- 类里面 __funname__ 都是魔法方法,有一些特殊作用
练习:
简单类型的字典获取:
class DictToObject(dict): def __getattr__(self, item): value = self[item] return value d = DictToObject({'a':1}) print(d.a) #有__getattr__方法,就可以直接 d.a 这种方式来直接的调用了 #结果 1
复杂点的字典类型获取:
class DictToObject(dict): def __getattr__(self, item): value = self[item] if type(value) == dict: # 判断下如果类型是dict(字典类型) value = DictToObject(value) # 把{'sarlay':500给到类 return value d1= {'a':1,'name':'xioahei','money':{'sarlay':500}} d = DictToObject(d1) print(d.money.sarlay) #结果 500
字典里面嵌套list:
class DictToObject(dict): '''字典转对象''' # def __init__(self,*args,**kwargs): # super.__init__(*args,**kwargs) #如果是想要修改父类的方法,可以使用此方法在下边做修改 def __getattr__(self, item): #__getattr__的作用是通过x.xx的时候它会自动调用__getattr__这个方法,把你要获取的属性的key传过来 #比如说 user.name ,它就是调用了__getattr__,把name传给__getattr__函数,然后返回这个name的值 value = self[item] if isinstance(value,dict): value = DictToObject(value)#如果是字典类型,直接返回DictToObject这个类的对象 #是字典了再次把调用DictToObject(),把value给继续执行DictToObject() elif isinstance(value,list) or isinstance(value,tuple): #如果是list,循环list判断里面的元素,如果里面的元素是字典,那么就把字典转成DictToObject的对象 value = list(value) for index,obj in enumerate(value): if isinstance(obj,dict): value[index] = DictToObject(obj) return value d1 = {'a':1,'name':'xiaohei','money':{'sarlay':500}, 'car':[ {'name':'benz'} ,{'name':'bmw'},12,3,4 ] } d = DictToObject(d1) print(d.car[0].name) #结果 benz
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/13340245.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架