Mir ist klar, dass dies eine alte Frage ist, aber es ist erwähnenswert, dass diese beiden Dinge selbst in Python 3 nicht ganz dasselbe sind.
Wenn Sie explizit von erben object, erben Sie tatsächlich von, builtins.object unabhängig davon, worauf dies zu diesem Zeitpunkt hinweist.
Daher könnte ich ein (sehr verrücktes) Modul haben, das aus irgendeinem Grund das Objekt überschreibt. Wir nennen dieses erste Modul "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
Dann in einer anderen Datei ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Dann in einer dritten Datei (die wir tatsächlich ausführen können):
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
Sie sehen also, dass wir in dem Fall, in dem es explizit vom Objekt erbt, ein anderes Verhalten erhalten als wenn Sie die implizite Vererbung zulassen.