"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'. >>> 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