Chapter 3
Subclassing Built-in Types
- I started learning Python after this was added, so it never occurred to me not to do this.
Accessing Methods from Superclasses
- Tries to explain super, but it's quite confusing (mostly due to the multiple-inheritance problems).
- The standard docs do a better job of making it clear the main benefit is making maintenance easier in single-inheritance examples.
- Understanding Python's Method Resolution Order (MRO)
- The section isn't as clear as it could be, but it has solid information. It explains what the MRO is used for and how it's different between 2.2 and 2.3, and the
__mro__
attribute
- super Pitfalls
- Points out some of the most common problems with super: mixing
super
and classic calls (and how to use__mro__
to choose what to do) and subclass constructors that take arguments that differ from their parent classes.
Best Practices
- Solid, short (so you can remember it) section.
Descriptors and Properties
- Descriptors
- This section isn't overly clear. It describes what descriptors are from a technical perspective, but doesn't do a great job of explaining why you'd want to use them. Also, a fair number of the examples have errors, e.g., code for setting values when the text says it is for reading values. Luckily, it contains a link to the (more helpful) How-To Guide for Descriptors.
- Properties
- This section explains property and the property attributes it returns (though not necessarily why they're so useful) and does a good job of pointing out some gotchas, e.g., the way they don't pick up overridden methods. The solution offered is perfectly sensible: override the property instead of the (typically private) method bound to
fget
.
Slots
- Short but informative section on slots, which I haven't seen mentioned before.
Meta-Programming
- The
__new__
Method - This section covers
__new__
and its usefulness for making sure that a class's invariants aren't violated because a subclass didn't explicitly invoke__init__
.
- The
__metaclass__
method - This section covers customizing class creation using
__metaclass__
and points out that, in most cases, there are easier-to-understand alternatives. One example of when there isn't is adjusting read-only attributes, e.g., the__doc__
attribute of the built-in metaclasstype
. Other suggested usages for__metaclass__
include frameworks enforcing behavior across large groups of classes and orthogonal functionality such as logging. The section closes with a link to A Primer on Python Metaclass Programming.
Summary
The summary section is a short, bulleted list highlighting the most important points made in the chapter. Again, it's short enough to be easily memorable.
Back to flipping out...