Spaces:
Running
on
Zero
Running
on
Zero
class JsonObject: | |
def __init__(self, initial_dict=None): | |
""" | |
Initialize the JsonObject with an optional initial dictionary. | |
:param initial_dict: A dictionary to initialize the JsonObject. | |
""" | |
# If no initial dictionary is provided, use an empty dictionary | |
self._dict_obj = initial_dict if initial_dict is not None else {} | |
if self._dict_obj is self: | |
raise ValueError("JsonObject cannot be initialized with itself") | |
def __getattr__(self, name): | |
""" | |
Get an attribute value. If the attribute does not exist, | |
look it up in the internal dictionary. | |
:param name: The name of the attribute. | |
:return: The value of the attribute. | |
:raises AttributeError: If the attribute is not found in the dictionary. | |
""" | |
try: | |
return self._dict_obj[name] | |
except KeyError: | |
return None | |
def __setattr__(self, name, value): | |
""" | |
Set an attribute value. If the attribute name is '_dict_obj', | |
set it directly as an instance attribute. Otherwise, | |
store it in the internal dictionary. | |
:param name: The name of the attribute. | |
:param value: The value to set. | |
""" | |
if name == "_dict_obj": | |
super().__setattr__(name, value) | |
else: | |
self._dict_obj[name] = value | |
def __delattr__(self, name): | |
""" | |
Delete an attribute. If the attribute does not exist, | |
look it up in the internal dictionary and remove it. | |
:param name: The name of the attribute. | |
:raises AttributeError: If the attribute is not found in the dictionary. | |
""" | |
try: | |
del self._dict_obj[name] | |
except KeyError: | |
return | |
def __getitem__(self, key): | |
""" | |
Get an item value from the internal dictionary. | |
:param key: The key of the item. | |
:return: The value of the item. | |
:raises KeyError: If the key is not found in the dictionary. | |
""" | |
if key not in self._dict_obj: | |
return None | |
return self._dict_obj[key] | |
def __setitem__(self, key, value): | |
""" | |
Set an item value in the internal dictionary. | |
:param key: The key of the item. | |
:param value: The value to set. | |
""" | |
self._dict_obj[key] = value | |
def __delitem__(self, key): | |
""" | |
Delete an item from the internal dictionary. | |
:param key: The key of the item. | |
:raises KeyError: If the key is not found in the dictionary. | |
""" | |
del self._dict_obj[key] | |
def to_dict(self): | |
""" | |
Convert the JsonObject back to a regular dictionary. | |
:return: The internal dictionary. | |
""" | |
return self._dict_obj | |
def has_key(self, key): | |
""" | |
Check if the key exists in the internal dictionary. | |
:param key: The key to check. | |
:return: True if the key exists, False otherwise. | |
""" | |
return key in self._dict_obj | |
def keys(self): | |
""" | |
Get a list of keys in the internal dictionary. | |
:return: A list of keys. | |
""" | |
return self._dict_obj.keys() | |
def values(self): | |
""" | |
Get a list of values in the internal dictionary. | |
:return: A list of values. | |
""" | |
return self._dict_obj.values() | |
def clone(self): | |
""" | |
Clone the JsonObject. | |
:return: A new JsonObject with the same internal dictionary. | |
""" | |
return JsonObject(self._dict_obj.copy()) | |
def merge(self, other): | |
""" | |
Merge the internal dictionary with another dictionary. | |
:param other: The other dictionary to merge. | |
""" | |
self._dict_obj.update(other) | |