Frage

Alle Python Einbauten Subklassen von object sind, und ich komme in vielen benutzerdefinierten Klassen, die auch sind. Warum? Was ist der Zweck der Klasse object? Es ist nur eine leere Klasse, nicht wahr?

War es hilfreich?

Lösung

Kurz gesagt, es setzt frei magisches Pony.

In langen, Python 2.2 und früher verwendete "alte Stil-Klassen". Sie waren eine spezielle Implementierung von Klassen, und sie hatten ein paar Einschränkungen (zum Beispiel, könnten Sie nicht eingebauten Typ Unterklasse). Die Lösung für dieses war eine neue Art von Klasse zu erstellen. Aber dies tun würde einige rückwärts inkompatible Änderungen beinhalten. Also, um sicherzustellen, dass Code, der für alte Stil Klassen geschrieben wird noch Arbeit wurde die object Klasse erstellt für alle neuen Stil Klassen als übergeordnete Klasse zu handeln. Also, in Python 2.x, class Foo: pass wird schafft eine im alten Stil Klasse und class Foo(object): pass wird eine neue Stil-Klasse erstellen.

In mehr finden Guido Unifying Typen und Klassen in Python 2.2 .

Und in der Regel ist es eine gute Idee, in die Gewohnheit, machen alle Klassen neuen Stils, weil einige Dinge (die @property Dekorateur ist eine, die in den Sinn kommt) wird nicht die Arbeit mit alten Stil-Klassen.

Andere Tipps

Kurze Antwort: Subklassen object effektiv macht es zu einem new-style 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 diese Stackoverflow Frage . Für die komplette Geschichte: siehe diese nette Zuschreibung auf Python-Typen und Objekte

Es hat mit dem „neuen Stil“ der Klassen zu tun. Sie können mehr darüber lesen Sie hier: http://docs.python.org/ tutorial / classes.html # Mehrfachvererbung und auch hier: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

Mit neuem Stil Klassen ermöglicht es Ihnen, „Pythons neueren, vielseitige Funktionen wie __slots__, Deskriptoren, Eigenschaften und __getattribute __ ().“ Zu verwenden,

Richtig, aber es markiert die Klasse als neuen Stil Klasse. Neu entwickelte Klassen die object Basis verwenden sollte, weil es wenig kostet und zukunftssicher Ihr Code.

Die kurze Version ist, dass klassische Klassen, die nicht eine übergeordnete Klasse brauchten, Beschränkungen hatten, die nicht umgangen werden könnte, ohne viele alten Code zu brechen. So sie das Konzept der neuen Stils Klassen geschaffen, die Unterklasse von object, und jetzt können Sie coole Dinge tun Eigenschaften definieren, und Subklassen dict ist nicht mehr eine Übung in Schmerz und seltsame Fehler.

Die Einzelheiten sind in Abschnitt 3.3 der Python-Dokumentation: Neu- Stil und klassische Klassen.

Python 2.2 eingeführten "neuen Stil Klassen" , die eine Reihe von zusätzlichen Funktionen im Vergleich zu den alten Stil Klassen hatten, die nicht Unterklasse-Objekt hat. Subklassen Objekt war der gewählte Weg, um anzuzeigen, dass Ihre Klasse eine neue Stil Klasse sein sollte, nicht im alten Stil ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top