Je me rends compte que c'est une vieille question, mais il convient de noter que même en python 3, ces deux choses ne sont pas tout à fait la même chose.
Si vous héritez explicitement de object, ce que vous faites réellement hérite builtins.object de ce que cela indique à ce moment-là.
Par conséquent, je pourrais avoir un module (très farfelu) qui remplace l'objet pour une raison quelconque. Nous appellerons ce premier module "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
Puis dans un autre fichier ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Puis dans un troisième fichier (que nous pouvons effectivement exécuter):
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
Ainsi, vous pouvez voir que, dans le cas où il hérite explicitement d'un objet, nous obtenons un comportement différent de celui où vous autorisez l'héritage implicite.