Prior to Python version 3.3 the classes from
collections.abcwere located directly undercollections, e.g.collections.Iteratorinstead ofcollections.abc.Iterator.
>>> import collections, types >>> issubclass(types.GeneratorType, collections.abc.Iterator) True >>> isinstance(a_generator, collections.abc.Iterator) True >>> issubclass(collections.abc.Iterator, collections.abc.Iterable) True >>> collections.abc.Iterable() Traceback (most recent call last): File "<pyshell#79>", line 1, in <module> collections.abc.Iterable() TypeError: Can't instantiate abstract class Iterable with abstract methods __iter__ >>> all(isinstance(element, collections.abc.Iterable) for element in ( (), [], {}, set(), frozenset(), '', b'', bytearray(), range(0), memoryview(b''))) True >>> collections.abc.Iterator() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't instantiate abstract class Iterator with abstract methods __next__ >>> all(isinstance(iter(element), collections.abc.Iterator) for element in ( (), [], {}, set(), frozenset(), '', b'', bytearray(), range(0), memoryview(b''))) True