order-processing/Attr_Dict.py

46 lines
1.4 KiB
Python

class Attr_Dict (dict) :
def _convert_dict (self, o) :
return self.__class__ (o)
# end def _convert_dict
def _convert_sequence (self, o) :
result = []
for v in o :
if isinstance (v, (list, tuple)) :
result.append (self._convert_sequence (v))
elif isinstance (v, dict) :
result.append (self._convert_dict (v))
else :
result.append (v)
if isinstance (o, tuple) :
return tuple (result)
return result
# end def _convert_sequence
def __getitem__ (self, key) :
value = super ().__getitem__ (key)
if isinstance (value, dict) :
value = self [key] = self._convert_dict (value)
if isinstance (value, (tuple, list)) :
value = self [key] = self._convert_sequence (value)
return value
# end def __getitem__
def __getattr__ (self, name) :
try :
return self [name]
except KeyError :
raise AttributeError (name)
# end def __getattr__
def __setattr__ (self, name, value) :
self [name] = value
# end def __setattr__
# end class Attr_Dict
if __name__ == "__main__" :
a = Attr_Dict (a = {"b" : 1}, b = [{"a": 1}], c = ({"a" : 1}, ))