Dotsdict类实现了类似属性访问的方式访问字典。其继承dict类,默认支持输入字典和关键字参数进行初始化,可以递归地用点访问、设置以及删除字典的键值对。
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# Author: Xingbang Jiang
# E-mail: 1278561590@qq.com
# HomePage: http://wwww.xingbangsharing.tech
import re
class Dotsdict(dict):
    def __init__(self, args, **kwargs):
        super(Dotsdict, self).__init__(args, **kwargs)
        for obj in [args, kwargs]:
            for k, v in obj.items():
                if isinstance(v, dict):
                    v = Dotsdict(v)
                self.__setitem__(k, v)
    def __setitem__(self, key, val):
        super(Dotsdict, self).__setitem__(key, val)
        # self.__dict__[key] = val
    def __delitem__(self, key):
        super(Dotsdict, self).__delitem__(key)
        # del self.__dict__[key]
    def __getitem__(self, key):
        return super(Dotsdict, self).__getitem__(key)
    def __missing__(self, key):
        dots = Dotsdict()
        self.__setitem__(key, dots)
        return dots
    __setattr__, __delattr__, __getattr__ = __setitem__, __delitem__, __getitem__