Python explicitly provides an abstract base class to describe this interface, along with default implementations of most methods, in [`collections.Mapping`](http://docs.python.org/2/library/collections.html) (note that the glossary definition also makes clear that `dict` is but one example of a mapping, even within the standard library). The right way to test if something is "dict-like" is `isinstance(obj, collections.Mapping)`.

Side note: Subclassing `Mapping`, or in our case `MutableMapping`, has been the recommended technique for creating these kinds of objects since Python 2.6, we should take profit or that!