zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    正则结合
    解决Linux下yum安装无法解析URL的问题
    Linux安装PHP和MySQL
    Windows安装PHP MongoDB扩展
    转】关于cgi、FastCGI、php-fpm、php-cgi
    Linux安装PHP MongoDB扩展
    mysql InnoDB引擎 共享表空间和独立表空间(转载)
    Mysql优化ibdata1大小
    Magento-设置产品显示的条数和默认条数
    MySql创建指定字符集的数据库
  • 原文地址:https://www.cnblogs.com/brf-test/p/13340245.html
Copyright © 2011-2022 走看看