Zdaję sobie sprawę, że jest to stare pytanie, ale warto zauważyć, że nawet w pytonie 3 te dwie rzeczy nie są tym samym.
Jeśli jawnie dziedziczą object
, co się faktycznie robi dziedziczy z builtins.object
niezależnie od tego, że wskazuje na czasie.
Dlatego mógłbym mieć (bardzo zwariowany) moduł, który z jakiegoś powodu unieważnia obiekt. Zadzwonimy Pierwszy moduł "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
Potem w jakiś inny plik ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Potem w trzecim pliku (który możemy rzeczywiście uruchomić):
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
Więc widać, że w przypadku, gdy jest to wyraźnie dziedziczy z obiektu, mamy inne zachowanie niż gdzie pozwalają na niejawny dziedziczenia.
Jeśli twój kod będzie również używany w wersji 2.x, dobrze jest być wyraźnym. – smci