In Python2, declaring object
as the base class makes the class a new-style class. Otherwise, it is a "classic" class. Among the differences are that
Properties only work with new-style classes
new-style classes have the mro
method
new-style classes have many attributes that classic classes lack
In [288]: class Foo: pass
In [289]: dir(Foo)
Out[289]: ['__doc__', '__module__']
In [290]: class Bar(object): pass
In [291]: dir(Bar)
Out[291]: ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Classic classes are retained in Python2 only for backwards compatibility. All custom classes you define should be made new-style.
In Python3, all classes are new-style, so it need not be explicitly declared there.