Martin McBride, 2021-08-27
Tags magic method duck typing iterable sequence context manager callable object
Categories object protocols
There are several special types of objects that you might have met already. These include:
- Iterables - an iterable is an object that you can iterate over, essentially anything that you can loop over using a for loop. This includes lists, tuples, strings, ranges, generators, dictionaries, sets, and other objects.
- Sequences - sequences are types such as lists, tuples, and strings. They are collections of elements that allow you to index, search and count elements.
- Context managers - these are objects than can be used in
withstatements, top manage resources. The most common example is the file object.
- Callable objects - these are objects that can be called as if they are functions.
In addition to these existing object, you can easily implement your own similar classes. For example you can create a context manager that will integrate seamlessly with Python
with statements, to provide your code with the ability to automatically clean up when an object is no longer required.
You might perhaps expect that Python would have special base classes for these types. For example, you might expect that there would be a
Iterable class that all iterables are based on, or a
ContextManager class that all context manager inherit.
But in fact, Python has a simpler, more flexible mechanism, based on magic methods.
For example, any class in Python that implements the magic methods
__next__ will automatically be an iterator. If you use that class in a for loop, it will just work. This is an example of duck typing. If an object does all the things an iterator does, then it is an iterator.
In this series we will look at:
- Duck typing.
- Iterable/iterator object protocol.
- Implementing sequences.
- Implementing context managers.
- Implementing callable objects.