Alle Python-Einbauten sind Unterklassen von object
und ich stoße auf viele benutzerdefinierte Klassen, die auch sind. Warum? Was ist der Zweck der Klasse object
? Es ist nur eine leere Klasse, oder?Was ist der Zweck der Unterklasse der Klasse "Objekt" in Python?
Antwort
Kurz gesagt, setzt es frei magisches Pony.
In langen, Python 2.2 und früher verwendeten "alte Stil-Klassen". Sie waren eine bestimmte Implementierung von Klassen und hatten einige Einschränkungen (zum Beispiel konnten Sie keine eingebauten Typen ableiten). Das Problem bestand darin, einen neuen Klassenstil zu erstellen. Dies würde jedoch einige rückwärtskompatible Änderungen mit sich bringen. Um sicherzustellen, dass Code, der für alte Stilklassen geschrieben wurde, immer noch funktioniert, wurde die Klasse object
erstellt, um als Oberklasse für alle neuen Stilklassen zu fungieren. In Python 2.X erstellt class Foo: pass
eine Klasse im alten Stil und class Foo(object): pass
erstellt eine neue Stilklasse.
In mehr finden Guido Unifying types and classes in Python 2.2.
Und im Allgemeinen ist es eine gute Idee, sich daran zu gewöhnen, alle Ihre Klassen neu zu gestalten, weil einige Dinge (die @property
Dekorator ist eine, die in den Sinn kommt) nicht mit Old-Style-Klassen arbeiten .
Richtig, aber es markiert die Klasse als new-style Klasse. Neuentwickelte Klassen sollten die Basis verwenden, da sie Ihren Code wenig und zukunftssicher kostet.
Es hat mit dem „neuen Stil“ der Klassen zu tun. Hier können Sie mehr darüber lesen: http://docs.python.org/tutorial/classes.html#multiple-inheritance und auch hier: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
neue Stil-Klassen ermöglicht es Ihnen, verwenden „Python neuere, vielseitige Funktionen wie __slots__, Deskriptoren, Eigenschaften und __getattribute __().“
Die kurze Version ist, dass klassische Klassen, die ohne zu brechen viele alten Code nicht eine übergeordnete Klasse benötigte, Einschränkungen hatten, die nicht umgangen werden konnte. Also haben sie das Konzept der neuen Stil-Klassen erstellt, die von object
ableiten, und jetzt können Sie coole Dinge wie Eigenschaften definieren, und Subklassen dict
ist nicht mehr eine Übung in Schmerzen und seltsamen Bugs.
Die Einzelheiten sind in Abschnitt 3.3 der Python-Dokumentation: New-style and classic classes.
Python 2.2 introduced "new style classes", die eine Reihe von zusätzlichen Funktionen im Vergleich zu den alten Stil Klassen hatte, die nicht Unterklasse-Objekt hat. Subclasses-Objekt war der gewählte Weg, um anzugeben, dass Ihre Klasse eine neue Stilklasse sein sollte und keine alte Stilklasse.
Kurze Antwort: Subklassen object
macht es effektiv eine neuen Stil Klasse (beachten Sie, dass diese, da die automatische in Python 3.x nicht erforderlich ist)
Für die Differenz zwischen new style
Klassen und old style
Klassen: siehe this stackoverflow question. Für die komplette Geschichte: siehe this nice writeup on Python Types and Objects.
@thetaiko listet einige andere Dinge auf, die nur für den neuen Stil gedacht sind. –
Für die Nachwelt ist es erwähnenswert, dass neu-style Klassen der Standard in Python3 sind und Unterklassen 'object' unnötig sind. – slightlynybbled