Containers and collections
The collections module defines a number of collections above and beyond the built-in container classes. The container classes include namedtuple(), deque, ChainMap, Counter, OrderedDict, and defaultdict. All of these are examples of classes based on ABC definitions.
The following is a quick interaction to show how we can inspect collections to see the methods they will support:
>>> isinstance( {}, collections.abc.Mapping )
True
>>> isinstance( collections.defaultdict(int), collections.abc.Mapping )
TrueWe can inspect the simple dict class to see that it follows the basic mapping protocol and will support the required methods.
We can inspect a defaultdict collection to confirm that it is also a mapping.
When creating a new kind of container, we can do it informally. We can create a class that has all of the right special methods. However, we aren't required to make a formal declaration that it's a certain kind of container.
It's more clear (and more...