Me doy cuenta de que esta es una pregunta antigua, pero vale la pena señalar que incluso en Python 3 estas dos cosas no son exactamente lo mismo.
Si hereda explícitamente de object, lo que en realidad está haciendo es heredar de builtins.object independientemente de lo que eso apunte en ese momento.
Por lo tanto, podría tener algún módulo (muy loco) que anule el objeto por alguna razón. Llamaremos a este primer módulo "newobj.py":
import builtins
old_object = builtins.object
class new_object(old_object):
def __init__(self, *args, **kwargs):
super(new_object, self).__init__(*args, **kwargs)
self.greeting = "Hello World!"
builtins.object = new_object
Luego, en otro archivo ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Luego, en un tercer archivo (que realmente podemos ejecutar):
import newobj, klasses
greeter = klasses.Greeter()
print(greeter.greeting)
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting)
Entonces, puede ver que, en el caso de que herede explícitamente de un objeto, obtenemos un comportamiento diferente al que permite la herencia implícita.