Arnaud Delobelle <[EMAIL PROTECTED]> writes: > "Alex Gusarov" <[EMAIL PROTECTED]> writes: > >>> class Event(object): >>> >>> Always subclass object, unless you have a very compelling reason not to, >>> or you are subclassing something else. >>> >> >> I've thought that if I write >> >> class Event: >> pass >> >> , it'll be subclass of object too, I was wrong? > > You are wrong for Python 2.X, but right for Python 3 where old-style > classes are gone for good. > > What you define with the statement > > class Event: pass > > is an 'old-style' class. Witness: > > >>> class Event: pass > ... > >>> class NewEvent(object): pass > ... > >>> type(Event) > <type 'classobj'> > >>> type(NewEvent) > <type 'type'> > >>> type(Event()) > <type 'instance'> > del>>> type(NewEvent()) > <class '__main__.NewEvent'> > > All old-style classes are actually objects of type 'classobj' (they > all have the same type!), all their instances are all of type 'instance'.
Oops somthing disappeared in the copy/paste process: >>> class FooBar: pass ... > >>> type(FooBar) == type(Event) > True > >>> type(FooBar()) == type(Event()) > True > > Whereas instances of new-style classes are of type their class: > > >>> class NewFooBar(object): pass > ... > >>> type(NewFooBar) == type(NewEvent) > True > >>> type(NewFooBar()) == type(NewEvent()) > False > > However, in python 2.X (X > 2?), you can force all classes to of a > certain type by setting the global variable '__metaclass__'. So: > > >>> type(Event) # Event is an old-style class > <type 'classobj'> > >>> __metaclass__ = type > >>> class Event: pass > ... > >>> type(Event) # Now Event is new-style! > <type 'type'> > > HTH > > -- > Arnaud -- http://mail.python.org/mailman/listinfo/python-list