Me doy cuenta de que esta es una vieja pregunta, 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 realmente está haciendo es heredar de builtins.object
independientemente de lo que señale en ese momento.
Por lo tanto, podría tener algún módulo (muy raro) que anule el objeto por alguna razón. Vamos a llamar a este primer módulo "newobj.py":
import builtins
old_object = builtins.object # otherwise cyclic dependencies
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 #overrides the default object
Luego, en algún otro archivo ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Luego, en un tercer archivo (que puede en realidad la prueba):
import newobj, klasses # This order matters!
greeter = klasses.Greeter()
print(greeter.greeting) # prints the greeting in the new __init__
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting) # throws an attribute error
Así se puede ver que, en el caso en que se hereda de forma explícita desde el objeto, se obtiene un comportamiento diferente de donde se permite la herencia implícita.
Si su código también se usará en 2.x, es bueno ser explícito. – smci