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

War es hilfreich?

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/

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