Chapter 31. Designing with Classes
So far in this part of the book, we’ve concentrated on using Python’s OOP tool, the class. But OOP is also about design—that is, how to use classes to model useful objects. Toward this end, this chapter codes common OOP design patterns in Python, such as inheritance, composition, delegation, and factories. Along the way, we’ll also investigate some design-focused class concepts, such as pseudoprivate attributes, multiple inheritance, and bound methods. Because multiple inheritance is dependent on the MRO search order, we’ll finally explore that here too.
One note up front: some of the design terms mentioned here require more coverage than this book can provide. If this material sparks your curiosity, you may want to consider exploring a text on OOP design or design patterns as a next step. As you’ll see, the good news is that Python makes many traditional design patterns almost trivial.
Python and OOP
Let’s begin with a review—Python’s implementation of OOP can be summarized by three ideas:
- Inheritance
- Inheritance is based on attribute lookup in Python (in
X.nameexpressions). - Polymorphism
- In
X.method, the meaning ofmethoddepends on the type (class) of subject objectX. - Encapsulation
- Methods and operators implement behavior, though data hiding is a convention by default.
By now, you should have a good feel for what basic inheritance is all about in Python, so we’ll take it as a given here. As you’ve learned, it’s the mechanism behind flexible ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access