constDict.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. class ConstDict(object):
  2. __slots__ = []
  3. def __init__(self, dic):
  4. for key, val in dic.items():
  5. setattr(self, key, val)
  6. def __iter__(self):
  7. return iter(self.__slots__)
  8. def __getitem__(self, item):
  9. if not isinstance(item, str):
  10. return None
  11. return getattr(self, item)
  12. def __setitem__(self, key, value):
  13. return setattr(self, key, value)
  14. def __contains__(self, item):
  15. return hasattr(self, item)
  16. def __repr__(self):
  17. return self.__str__()
  18. def __str__(self):
  19. return str(dict(self.items()))
  20. def get(self, key, default=None):
  21. return getattr(self, key, default)
  22. def update(self, dic):
  23. for key, val in dic.iteritems():
  24. if key in self.__slots__:
  25. setattr(self, key, val)
  26. def clear(self):
  27. for key in self.__slots__:
  28. if hasattr(self, key):
  29. delattr(self, key)
  30. def setdefault(self, key, val):
  31. if hasattr(self, key):
  32. return getattr(self, key)
  33. else:
  34. setattr(self, key, val)
  35. return val
  36. def pop(self, key, default=None):
  37. if hasattr(self, key):
  38. val = getattr(self, key)
  39. delattr(self, key)
  40. return val
  41. return default
  42. def iteritems(self):
  43. return iter(self.items())
  44. def items(self):
  45. return [(key, getattr(self, key, None)) for key in self.__slots__ if hasattr(self, key)]
  46. def iterkeys(self):
  47. return iter(self.keys())
  48. def itervalues(self):
  49. return iter(self.values())
  50. def keys(self):
  51. return [key for key in self.__slots__ if hasattr(self, key)]
  52. def values(self):
  53. return [getattr(self, key, None) for key in self.__slots__ if hasattr(self, key)]