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

高洛峰
Freigeben: 2017-03-16 17:20:47
Original
1965 Leute haben es durchsucht

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 < zurück. Geben Sie „Instanz“> 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;>
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage