The key idea in turning an object to accept dict-like access mechanism is to inherit that class from a dict and provide methods for setting, getting, and deleting the keys of the dictionary-like object.
Here's a working example
        
class DictLikeObject(dict):
  def __init__(self):
    self.a_regular_attribute = 'blah'
    self['some_key'] = 'bar'
  def some_method(self, arg1, **kwargs):
    do_something()
  def __setattr__(self, key, value):
    self[key] = value
  def __getattr__(self, key):
    if key in self:
      return self[key]
    else:
      raise AttributeError("No such attribute: " + key)
  def __delattr__(self, key):
    if key in self:
      del self[key]
    else:
      raise AttributeError("No such attribute: " + key)
      
  
There, you have it. You own dict like object. You can define regular attributes and methods. For example, see a_regular_attribute and some_method in the class definition above.
You can also initialize some dict-like members. For example, see see some_key.
You can also create attributes on the fly as shown in the following snippet.
        
  dlo = DictLikeObject()
  dlo['new_key'] = 'foo'