Mi rendo conto che questa è una vecchia domanda, ma vale la pena notare che anche in Python 3 queste due cose non sono esattamente la stessa cosa.
Se erediti esplicitamente da object, ciò che stai effettivamente facendo è ereditare da builtins.object indipendentemente da ciò a cui punta in quel momento.
Pertanto, potrei avere un modulo (molto stravagante) che sovrascrive l'oggetto per qualche motivo. Chiameremo questo primo modulo "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
Quindi in qualche altro file ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Quindi in un terzo file (che possiamo effettivamente eseguire):
import newobj, klasses
greeter = klasses.Greeter()
print(greeter.greeting)
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting)
Quindi puoi vedere che, nel caso in cui erediti esplicitamente da un oggetto, otteniamo un comportamento diverso da quello in cui permetti l'ereditarietà implicita.