Ich weiß, dass dies eine alte Frage ist, aber es ist erwähnenswert, dass selbst in Python 3 diese beiden Dinge nicht ganz dasselbe sind.
Wenn Sie explizit erben von object
vererben Sie eigentlich von builtins.object
unabhängig davon, worauf das zu diesem Zeitpunkt hindeutet.
Daher könnte ich einige (sehr verrückte) Modul, das Objekt aus irgendeinem Grund überschreibt haben. Wir werden dieses erste Modul "newobj.py" nennen:
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 explizit von object geerbt wird, ein anderes Verhalten erhalten, als wenn Sie die implizite Vererbung zulassen.
2 Stimmen
Wenn Ihr Code auch unter 2.x verwendet werden soll, ist es gut, dies explizit zu sagen.
2 Stimmen
In dieser Frage wird sie gut beantwortet: stackoverflow.com/questions/4015417/