Я понимаю, что это старый вопрос, но стоит отметить, что даже в python 3 эти две вещи не совсем одно и то же.
Если вы явно наследуете от object, то, что вы на самом деле делаете, наследует от, builtins.object независимо от того, на что это указывает в данный момент.
Поэтому у меня мог быть какой-то (очень дурацкий) модуль, который по какой-то причине переопределяет объект. Назовем этот первый модуль 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
Затем в другом файле ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Затем в третьем файле (который мы действительно можем запустить):
import newobj, klasses
greeter = klasses.Greeter()
print(greeter.greeting)
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting)
Итак, вы можете видеть, что в случае, когда он явно наследуется от объекта, мы получаем другое поведение, чем там, где вы разрешаете неявное наследование.