Real Ultimate Programming

The Home for People Who Like to Flip Out and Write Code

Review of Expert Python Programming, Part Two

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 metaclass type. 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…