class C: vs class C(object):

George Sakkis george.sakkis at gmail.com
Fri Jul 20 11:29:07 EDT 2007


On Jul 20, 5:40 am, Bruno Desthuilliers <bruno.
42.desthuilli... at wtf.websiteburo.oops.com> wrote:
> Aahz a écrit :
>
> > In article <469f1557$0$26759$426a7... at news.free.fr>,
> > Bruno Desthuilliers  <bruno.42.desthuilli... at wtf.websiteburo.oops.com> wrote:
> >> To make a long story short: Python 2.2 introduced a new object model
> >> which is more coherent and more powerful than the original one. The old
> >> one was kept so far for compatibility reasons, but there's absolutely no
> >> reason to use it no more since "new-style" classes can do anything
> >> "Classic" classes did and much more. IOW, don't even bother with
> >> old-style classes.
>
> > And I'll make my usual knee-jerk response disagreeing with this.  For
> > more info, search groups.google.com.
>
> And you'll still make it harder for newcomers to understand why a lot of
> things don't work correctly with their classes. How helpful...
>
> Aahz, the object model switch happened *years* ago, and it's quite clear
> that old style classes have been kept so far for compatibility reasons
> only. It's obvious that one doesn't gain *anything* - except compat with
> years-old pre-2.2 versions of Python - using old-style classes. So *why*
> on earth are you still *advocating* the use of old style classes ??????

FWIW, I am not advocating old style classes and I rarely (if ever) use
them in new code, but I occasionally miss the following feature, which
by the way disproves the assertion that "new-style classes can do
anything Classic classes did":

class Classic: pass
class NewStyle(object):pass

for o in Classic(),NewStyle():
    o.__str__ = lambda: 'Special method overriding works on
instances!'
    print '%s object: %s' % (o.__class__.__name__, o)


George




More information about the Python-list mailing list