因为常使用js内的字典,其类型提示与"."访问都比较方便,这里也为python增强其功能.
实现思路.
网络上有一些简单的实现方式,但实际使用时存在一些问题,如在控制台内没有键的提示,数组内的字典没有得到增强等,我的实现方式没有这些问题.
如下为实现代码:
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操作