input: Write a python function to create a dictionary class with attribute-style access.
  assert d.foo == 123
  assert d.bar == "hello"
  d.baz = [1, 2, 3]
  assert d.baz == [1, 2, 3]
output: class AttrDict(dict):
      def __getattr__(self, item):
          try:
              return self[item]
          except KeyError:
              raise AttributeError(f"'AttrDict' object has no attribute '{item}'")
  
      def __setattr__(self, key, value):
          self[key] = value
  
      def __delattr__(self, item):
          try:
              del self[item]
          except KeyError:
              raise AttributeError(f"'AttrDict' object has no attribute '{item}'")
  
  def create_attr_dict():
      return AttrDict()
  
  # Example usage:
  d = create_attr_dict()
  d.foo = 123
  d.bar = "hello"
  d.baz = [1, 2, 3]
  assert d.foo == 123
  assert d.bar == "hello"
  assert d.baz == [1, 2, 3]