Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen Python-Klassen im neuen Stil und Klassen im alten Stil

Der Unterschied zwischen Python-Klassen im neuen Stil und Klassen im alten Stil

高洛峰
高洛峰Original
2016-10-17 13:25:491194Durchsuche

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 . 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 Sie nicht mit Klassen im alten Stil oder alten Klassenversionen kompatibel sein müssen, behalten Sie alle Klassen im neuen Stil 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;>


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