Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Unterschieds zwischen Python-Klassen im neuen Stil und Klassen im alten Stil

Detaillierte Erläuterung des Unterschieds zwischen Python-Klassen im neuen Stil und Klassen im alten Stil

高洛峰
高洛峰Original
2017-03-16 17:20:471917Durchsuche

Pythons Klassen im neuen Stil wurden in Version 2.2 eingeführt. Wir können die vorherigen Klassen als klassische Klassen oder Klassen im alten Stil bezeichnen.

Warum wird in 2.2 eine neue Stilklasse eingeführt? Die offizielle Erklärung lautet:

Um Klassen und Typen zu vereinheitlichen.

Vor 2.2, zum Beispiel in Version 2.1, waren Klassen und Typen unterschiedlich. Wenn a eine Instanz von ClassA ist, dann gibt a.__class__ „class __main__.ClassA“ zurück und type(a) gibt immer 145fcd7f54d9ff596e2f3bed0b1defe2 ein. Nach der Einführung einer neuen Klasse ist beispielsweise ClassB eine neue Klasse, b ist eine Instanz von ClassB, b.__class__ und type(b) geben beide „Klasse ‚__main__.ClassB‘“ zurück, sodass sie vereinheitlicht ist.

Nach der Einführung neuer Klassen gibt es weitere Vorteile, z. B. werden mehr integrierte Eigenschaften eingeführt, Deskriptoren können eingeführt werden, Eigenschaften können berechnet werden usw.

Aus Gründen der Vorwärtskompatibilität sind benutzerdefinierte Klassen standardmäßig klassische Klassen. Neue Klassen müssen vom Basisklassenobjekt aller Klassen oder einer neuen Klasse erben, die vom Objekt erbt.

Es ist erwähnenswert, dass, obwohl das neueste Python (2.7) verwendet wird, einige Funktionen bei Klassen im alten Stil nicht funktionieren.

Um sicherzustellen, dass Sie Klassen neuen Stils verwenden, gibt es zwei Methoden:

1. Metaclass, fügen Sie den folgenden Code am Anfang des Klassenmodulcodes hinzu: __metaclass__ = Klassenname (da eine neue Klasse definiert wurde).

2. Klassen erben direkt oder indirekt vom integrierten Klassenobjekt.

Wenn keine Notwendigkeit besteht, mit Klassen alten Stils oder Klassen alter Versionen kompatibel zu sein, behalten Sie alle Klassen neuen Stils bei.

In Python3 gibt es diese Probleme nicht, da alle Klassen (implizit) Unterklassen der Objektklasse sind.

Codebeispiel:

class oldClass:            #经典类
    def __init__( self ):
        pass
 
class newClass(object):    #新类
    def __init__( self ):
        pass 
 
c1 = oldClass()
c2 = newClass()
 
c1.__class__            # 输出-> <class __main__.oldClass at 0x0137BF10>
type(c1)                # 输出-> <type &#39;instance&#39;>
 
c2.__class__            # 输出-><class &#39;__main__.newClass&#39;>
type(c2)                # 输出-><class &#39;__main__.newClass&#39;>

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen Python-Klassen im neuen Stil und Klassen im alten Stil. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn