2010-04-06 10 views

Antwort

45

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 .

+0

@thetaiko listet einige andere Dinge auf, die nur für den neuen Stil gedacht sind. –

+2

Für die Nachwelt ist es erwähnenswert, dass neu-style Klassen der Standard in Python3 sind und Unterklassen 'object' unnötig sind. – slightlynybbled

3

Richtig, aber es markiert die Klasse als new-style Klasse. Neuentwickelte Klassen sollten die Basis verwenden, da sie Ihren Code wenig und zukunftssicher kostet.

0

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.

0

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.