python工程助手开发 (1) python字典增强

因为常使用js内的字典,其类型提示与"."访问都比较方便,这里也为python增强其功能.

1.增加字典的"."操作符访问

实现思路.
网络上有一些简单的实现方式,但实际使用时存在一些问题,如在控制台内没有键的提示,数组内的字典没有得到增强等,我的实现方式没有这些问题.

  1. 继承dict类.
  2. 添加__setattr__方法.
  3. 递归字典数据进行__setattr__

如下为实现代码:

class DictPlus(dict):
    def __init__(self,dic):
        dict.__init__(self)
        for key,item in dic.items():
            if key[0]!='_':
                if type(item)==dict:
                    self.__setattr__(key,DictPlus(dict))
                if type(item)==list:
                    self.__setattr__(key,self.__iterlist__(item))
                else:
                    self.__setattr__(key,item)
    def __iterlist__(self,item):
        temp=[DictPlus(x) if type(x)==dict else x for x in item]
        temp=[self.__iterlist__(x) if type(x)==list else x for x in temp]
        return temp
    def __setattr__(self,key,item):
        dict.__setattr__(self,key,item)
        self.update(self.__dict__)

使用方式:

In[0] #初始化
In[1] data = {"user": "zhangsan", "age": 20, "father": {"name": "lisi", "age": 44}, "cars": [{"name": "bmw"}]}
In[2] data_plus = DictPlus(data)
In[3] #字典访问
      data_plus.user
      data_plus["user"]
      data_plus.father.name
      data_plus.cars[0].name
In[4] #字典值设置
      data_plus.user="wangmazi"
      data_plus.mather={"name":"xiaohong"}

备注:按上面的实现思路,还可以修改字典getter与setter方法,实现各种hook操作

上一篇:python 仿造eveything软件


下一篇:SSRF---gopher和dict打redis