On Sun, 20 Dec 2009 11:11:54 -0500, Steve Holden wrote: > Dave Angel wrote: > [...] >> We were talking about 2.x And I explicitly mentioned 3.x because if >> one develops code that depends on old-style classes, they'll be in >> trouble with 3.x, which has no way to specify old-style classes. In >> 3.x, all classes are new-style. And although it'll no longer matter >> whether you specify (object), it doesn't do any harm. As I said, it's >> a good habit for a beginner to get into when defining classes. >> > I maintain that this almost-cargo-cult belief over-complicates things > for language beginners. How long do you have to be using Python before > you make your first super() call?
That depends on who you are and what you're doing. Are you a n00b who has never programmed before? An old Fortran or Pascal dinosaur who doesn't like that new fangled object stuff? A former Java OO guru whose class hierarchies are 85 classes deep on average? Someone who just discovered multiple inheritance and now everything looks like a nail? > How many programs behave differently > with old-style vs. new-style classes? Any program that uses properties will behave differently. __getattribute__ and __slots__ will not work at all in old-style classes. There will be subtle differences, e.g. isinstance(type, MyClass) will return False if MyClass is old-style. The default repr and str of instances will look different (which may or may not count as different behaviour). Speed and efficiency will be different. So I guess the correct answer to your question is "All of them". The interesting question is, what's the magnitude of the differences? The advice I used to give was, unless you care about the difference, always inherit from object because new-style classes are the way of the future. Unfortunately, it is no longer obvious whether something in isolation is a new-style or old-style class, as you have to know the target Python version. -- Steven -- http://mail.python.org/mailman/listinfo/python-list