Python字典转对象的两种方法(dict -> object使属性用点来调用)

新类重新赋值转化法

先建一个新类 Dict :

	class Dict(dict):
        __setattr__ = dict.__setitem__
        __getattr__ = dict.__getitem__

该类集成了原字典 dict 类,字典不能使用点调用属性,而该类可以,于是我们做值的转换:

    def dictToObj(dictObj):
        if not isinstance(dictObj, dict):
            return dictObj
        d = Dict()
        for k, v in dictObj.items():
            d[k] = dictToObj(v)
        return d

这样我们的字典经过 dictToObj() 函数处理后得到的对象( Dict 类)就可以直接点到属性。

新类重写 set 、get法

从上面的思路中还可以得到一种衍生方法:

	class Dict(dict):
	
	    def __getattr__(self, key):
	        return self.get(key)
	
	    def __setattr__(self, key, value):
	        self[key] = value
	        

之后直接套到对象上转换即可,例:

	object = Dict({'m':1, 's': 2})

总结

实际上,第二种方法细心的可能会发现,没有处理多层结构!

所以当有多层结构时,第二种方法只能点到第一层上,还是用第一种方法较好,如果字典只有一层,那使用第二种方法较便捷快速。

你可能感兴趣的:(Python,python,object,json,dict)