• 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

  • 相关阅读:
    找出数组中出现次数超过一半的数字(众数)
    消失的两个数字(1-N缺两个数)
    47. Permutations II
    137. Single Number II
    Go语言内存分配(详述 转)
    Go语言内存分配(简述 转)
    redis分布式锁
    Golang调度器GMP原理与调度全分析(转 侵 删)
    android framework navigationbar自定义
    android studio使用中遇到的问题
  • 原文地址:https://www.cnblogs.com/brf-test/p/13340245.html
Copyright © 2020-2023  润新知