Rather than implementing `.get()` and having `__getitem__` proxy to `.get()`, why don't you do the reverse -- implement `__getitem__`, make it raise a `KeyError` if the key doesn't exist, and then implement `.get()` by proxying to `__getitem__` in a try/except block, catching the `KeyError` if it is raised, and returning the default instead.