import yaml class Object(dict): def __init__(self): super(Object, self).__init__() def __getattr__(self, key): return self.get(key) def __setattr__(self, key, value): if isinstance(value, dict): o = Object() o.set(value) self[key] = o else: self[key] = value def set(self, dictionary, clear=False): if clear: self.clear() for key, value in dictionary.items(): self.__setattr__(key, value) class Config(Object): _instance = None def __new__(cls, *args, **kwargs): if Config._instance is None: Config._instance = super().__new__(cls) return Config._instance def load(self, filename): with open(filename, 'r', encoding='utf8') as stream: data = yaml.load(stream, Loader=yaml.FullLoader) self.set(data)