參考來源: https://www.liaoxuefeng.com/wiki/1016959663602400/1018490750237280ide
代碼稍微修改了一下ui
import os import sys ps = os.path.abspath(os.path.split(os.path.abspath(os.path.realpath(__file__)))[0]) sys.path.extend([ps]) class Dict(dict): """ Simple dict but support access as x.y style. """ def __init__(self, names=(), values=(), **kw): super(Dict, self).__init__(**kw) for k, v in zip(names, values): self[k] = v def __getattr__(self, key): try: return self[key] except KeyError: raise AttributeError(r"'Dict' object has no attribute '%s'" % key) def __setattr__(self, key, value): self[key] = value def merge(defaults, override): """ 合併配置 :param defaults: :param override: :return: """ r = {} for k, v in defaults.items(): if k in override: if isinstance(v, dict): r[k] = merge(v, override[k]) else: r[k] = override[k] else: r[k] = v return r def to_dict(d): """ 轉換成 dict :param d: :return: """ dict_building = Dict() for k, v in d.items(): dict_building[k] = to_dict(v) if isinstance(v, dict) else v return dict_building try: # 引入默認配置 from config import config_default # 引入覆蓋配置 from config import config_override configs = merge(config_default.configs, config_override.configs) except ImportError: config_default = {} config_override = {} configs = {} pass configs = to_dict(configs) if __name__ == '__main__': print(configs)
Have fun with Python!spa