Typ der Klasse in Python
-
28-09-2019 - |
Frage
, warum, wenn ich tun:
class C(): pass
type(C())
Ich habe: <type 'instance'>
, aber wenn ich tun:
class C(object): pass
type(c())
Ich habe: <class '__main__.c'>
Das ist zunächst nicht sehr userfull
Lösung
Sehen Sie den Unterschied zwischen altem Stil und neuen Stil Klassen auf. Erstere sind die Standards und diese erben ausdrücklich von Objekt.
Alle alten Stil Objekte wurden umgesetzt mit der eingebauten Typ-Instanz. Die Tatsache, dass sie immer noch die Ausfall- und ihre Art bleibt ‚instance‘ ist ein Ergebnis der Retro-Kompatibilität Vorsichtsmaßnahmen sind.
Dies aus der Python-Dokumentation extrahiert (http://docs.python.org/reference/datamodel.html)
3.3. New-Stil und klassischen Klassen Klassen und Instanzen kommen in zwei Aromen: Im alten Stil (oder klassisch) und neuer Stil.
Bis zu Python 2.1, im alten Stil Klassen waren der einzige Geschmack der zur Verfügung stehenden Benutzer. Das Konzept der (alten Stils) Klasse ist mit dem Begriff der Art in keinem Zusammenhang: wenn x eine Instanz eines alten Stil Klasse, dann x. Klasse bezeichnet die Klasse von x, sondern Typ (x) ist immer . Dies spiegelt die Tatsache, dass alle alten Stil Instanzen, unabhängig von ihrer Klasse sind mit einem einzigen integrierten in realisiert Typ, die so genanntes Beispiel.
New-Style-Klassen wurden eingeführt in Python 2.2 Klassen und Typen zu vereinen. Ein neuer Stil Klasse ist weder mehr noch kleiner als ein benutzerdefinierter Typ. Wenn x eine Instanz eines neuen Stils Klasse, dann Typ (x) ist in der Regel die gleiche wie x>. Klasse (obwohl dies nicht der Fall ist garantiert - ein neuer Stil-Klasse Beispiel darf das zu überschreiben Wert zurück für x. Klasse ).
Die Hauptmotivation für die Einführung New-Style-Klassen ist es, eine einheitliches Objektmodell mit einem vollständigen Meta-Modell. Es hat auch eine Reihe von praktische Vorteile, wie die Fähigkeit, die meisten integrierten Typen, Unterklasse oder die Einführung von „Deskriptoren“, die es ermöglichen, berechnet Eigenschaften.
Aus Kompatibilitätsgründen Klassen sind noch im alten Stil standardmäßig. Neuer Stil Klassen werden durch die Angabe erstellt Ein weiterer neuer Klasse-Stil (d.h. ein Typ) als eine übergeordnete Klasse oder das „top-level Typ“Objekt, wenn kein anderer Elternteil erforderlich. Das Verhalten der neuen Stils Klassen unterscheidet sich von der im alten Stil Klassen in einer Reihe wichtiger Details zusätzlich zu welcher Art () kehrt zurück. Einige dieser Änderungen sind von grundlegender Bedeutung für das neue Objektmodell, die Art, wie spezielle Methoden sind aufgerufen. Andere sind „fixe“ Das könnte nicht vor implementiert werden für Kompatibilitätsprobleme, wie die Verfahren Auflösung um im Fall von Mehrfachvererbung.
Während dieses Handbuch Ziele zu schaffen, umfassende Berichterstattung über Pythons Klasse Mechanik, kann es noch sein in einigen Bereichen fehlt, wenn es darum geht, die Berichterstattung über neue Stil-Klassen. Bitte sehen http://www.python.org/doc/newstyle/ für Quellen von zusätzlichen Informationen.
Old-Style-Klassen werden entfernt in Python 3.0, so dass nur die Semantik neuen Stil classes.of neuer Stil Klassen.
Andere Tipps
Ehrlich gesagt, ich glaube nicht, eine kurze Antwort ist, um hier. Ich rate Ihnen, über Pythons Art Vereinigung / new-Style-Klassen hier zu lesen beginnen: http://www.python.org/doc/newstyle/