Summary
In this chapter, we focused on identifying objects, especially objects that are not immediately apparent; objects that manage and control. In particular, we covered:
Why objects should have both data and behavior
How properties blur the distinction between data and behavior
The DRY principle and the follies of duplicate code
Inheritance and composition for reducing code duplication
In the next chapter we'll cover several of the built-in Python data structures and objects, focusing on their object-oriented properties and how they can be extended or adapted.