class attr_dict(dict): def __getattr__(self, name): if name in self: return self[name] else: return super(attr_dict, self).__getattr__(name) def __getitem__(self, key): res = super(attr_dict, self).__getitem__(key) if isinstance(res, dict): return attr_dict(res) return res class _MetaInfo(object): def __init__(self, **kwargs): for name, value in kwargs.items(): setattr(self, name, value) self.structure = []