Table of Contents
- Object-Oriented Design
- Objects in Python
- When Objects Are Alike
- Expecting the Unexpected
- When to Use Object-Oriented Programming
- Abstract Base Classes and Operator Overloading
- Python Data Structures
- The Intersection of Object-Oriented and Functional Programming
- Strings, Serialization, and File Paths
- The Iterator Pattern
- Common Design Patterns
- Advanced Design Patterns
- Testing Object-Oriented Programs
- Concurrency

