On Class namespaces, calling methods

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Apr 10 21:07:09 EDT 2010


On Sat, 10 Apr 2010 16:35:29 +0000, Duncan Booth wrote:

> Anyway, the moral is never, ever to use old-style classes in Python 2.x.
> You will get weird and unexpected results.

That's a bit strong. They're only weird and unexpected if you're not 
expecting them and don't understand them.

Why are we worrying about the exact error message? New style or old 
style, they both raise TypeError, and testing for the exact error message 
is a fragile, dangerous thing to do: error strings are not part of the 
Python API, and are subject to change without notice, for any reason. For 
all we know, Python runtimes compiled on a Tuesday could use different 
error messages from runtimes compiled on Wednesdays.

I can only think of two circumstances where old-style classes are 
*wrong*: if you use multiple inheritance with a diamond diagram ("...now 
you have THREE problems" *wink*), if you intend using descriptors such as 
properties, or if you need __slots__. That's three circumstances: 
multiple inheritance with a diamond diagram, descriptors, __slots__, and 
__getattribute__. Four circumstances.

Any other time, they're merely discouraged, and gone in Python 3.x.



-- 
Steven



More information about the Python-list mailing list