I want to write a custom class that behaves like dict - so, I am inheriting from dict.
My question though is that do I need to create a private dict member in my init() method?. I dont see the point of this, since I already have the dict behaviour if I simply inherit from dict.
Can anyone point out why most of the inheritance snippets look like this:
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 an [] access function is not provided in the custom class, the inherited base methos 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).