This commit is contained in:
yumoqing 2025-07-18 14:14:50 +08:00
parent 6fb4f7eff0
commit ab18e1d513

View File

@ -20,40 +20,41 @@ class DictObjectEncoder(JSONEncoder):
return o._addon() return o._addon()
class DictObject(dict): class DictObject(dict):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__() super().__init__()
self.update(*args, **kwargs) self.update(*args, **kwargs)
def __getattr__(self, key): def __getattr__(self, key):
try: try:
return self[key] return self[key]
except KeyError: except KeyError:
raise AttributeError(f"No such attribute: {key}") return None
# raise AttributeError(f"No such attribute: {key}")
def __setattr__(self, key, value): def __setattr__(self, key, value):
self[key] = value self[key] = value
def __delattr__(self, key): def __delattr__(self, key):
try: try:
del self[key] del self[key]
except KeyError: except KeyError:
raise AttributeError(f"No such attribute: {key}") raise AttributeError(f"No such attribute: {key}")
def __setitem__(self, key, value): def __setitem__(self, key, value):
super().__setitem__(key, self._wrap(value)) super().__setitem__(key, self._wrap(value))
def update(self, *args, **kwargs): def update(self, *args, **kwargs):
for k, v in dict(*args, **kwargs).items(): for k, v in dict(*args, **kwargs).items():
self[k] = self._wrap(v) self[k] = self._wrap(v)
@staticmethod @staticmethod
def _wrap(value): def _wrap(value):
if isinstance(value, dict): if isinstance(value, dict):
return DictObject(value) return DictObject(value)
elif isinstance(value, list): elif isinstance(value, list):
return [DictObject._wrap(v) for v in value] return [DictObject._wrap(v) for v in value]
else: else:
return value return value
""" """
def dictObjectFactory(_klassName__,**kwargs): def dictObjectFactory(_klassName__,**kwargs):