To get the behavior desired of being able to do:
ClassDict['item'] = 'test'
I had to implement the special methods as a metaclass instead as Martijn pointed out.
So my final implementation looks like this:
class MetaClassDict(type):
_items = {}
@classmethod
def __getitem__(cls, key):
return cls._items[key]
@classmethod
def __setitem__(cls, key, val):
cls._items[key] = val
@classmethod
def __len__(cls):
return len(cls._items)
@classmethod
def __delitem__(cls, key):
cls._items.__delitem__(key)
@classmethod
def __iter__(cls):
return iter(cls._items)
class ClassDict(object):
__metaclass__ = MetaClassDict