from collections import abc
class Json:
def __init__(self,mapping):
self._data=dict(mapping)
def __getattr__(self, name):
if hasattr(self._data,name):
return getattr(self._data,name)
else:
try:
obj=self._data[name]
except KeyError:
obj=None
return self.build(obj)
@classmethod
def build(cls,obj):
if isinstance(obj,abc.Mapping):
return cls(obj)
elif isinstance(obj,abc.MutableSequence):
return [cls.build(i) for i in obj]
return obj
def __getitem__(self, item):
return self._data[item]
def __setitem__(self, key, value):
self._data[key]=value
def __setattr__(self, key, value):
if key !='_data':
self._data[key]=value
else:
super().__setattr__(key,value)
dic = {"name": "dgw", "age": {1:2},'d':[{'b':3},4]}
ret = Json(dic)
print(ret)
ret.name='aaa'
print(ret.name)
print(ret.d[0].b)
print(ret.age)
print(ret._data)
斜体样式