A python class that acts like dict

dictionary, python

Solution

Check the documentation on emulating container types. In your case, the first parameter to `add` should be `self`.

Problem

I want to write a custom class that behaves like `dict` - so, I am inheriting from `dict`. My question, though, is: Do I need to create a private `dict` member in my `__init__()` method?. I don't see the point of this, since I already have the `dict` behavior if I simply inherit from `dict`. Can anyone point out why most of the inheritance snippets look like the one below? ``` class CustomDictOne(dict): def __init__(self): self._mydict = {} # other methods follow ``` Instead of the simpler... ``` class CustomDictTwo(dict): def __init__(self): # initialize my other stuff here ... # other methods follow ``` Actually, I think I suspect the answer to the question is so that users cannot directly access your dictionary (i.e. they have to use the access methods that you have provided). However, what about the array access operator `[]`? How would one implement that? So far, I have not seen an example that shows how to override the `[]` operator. So if a `[]` access function is not provided in the custom class, the inherited base methods will be operating on a different dictionary? I tried the following snippet to test out my understanding of Python inheritance: ``` class myDict(dict): def __init__(self): self._dict = {} def add(self, id, val): self._dict[id] = val md = myDict() md.add('id', 123) print md[id] ``` I got the following error: KeyError: < built-in function id> What is wrong with the code above? How do I correct the class `myDict` so that I can write code like this? ``` md = myDict() md['id'] = 123 ``` [Edit] I have edited the code sample above to get rid of the silly error I made before I dashed away from my desk. It was a typo (I should have spotted it from the error message).

Original source

Related problems