Schneller Tipp Was ist eine Metaclass in Python?

Dieser kurze Tipp gibt einen kurzen Überblick über die Bedeutung einer Metaklasse in Python und zeigt einige Beispiele des Konzepts.

Bevor ich mich näher mit diesem Artikel beschäftige, sollte ich auf einen wichtigen Punkt zu Klassen in Python hinweisen, der es uns leichter macht, das Konzept der Metaklassen zu verstehen.

Ist eine Klasse ein Objekt in Python?!

Wenn Sie eine andere Programmiersprache als Python verwendet haben, ist das Konzept, das Sie über Klassen verstanden haben, höchstwahrscheinlich eine Möglichkeit, neue Objekte zu erstellen. Dies ist auch in Python der Fall, aber Python nimmt sogar noch einen Schritt weiter, wobei weitere Klassen auch als Objekte betrachtet werden!

Wenn Sie also die folgende Klasse in Python erstellt haben:

Klasse myClass (Objekt): pass

Dies bedeutet einfach, dass eine Objekt mit dem Namen meine Klasse wurde im Speicher erstellt. Da dieses Objekt neue Objekte erstellen kann, wird es als a betrachtet Klasse. Dies bedeutet, dass wir Objektoperationen auf Klassen in Python anwenden können, da Klassen selbst Objekte sind.

Wir können also Operationen an Klassen durchführen, beispielsweise die Klasse einer Variablen zuweisen:

class_object = myClass () druckt ein Klassenobjekt

Welche gibt zurück:

<__main__.myClass object at 0x102623610>

Sie können sogar die Klasse bestehen meine Klasse als Parameter für eine Methode wie folgt:

def class_object (object): Druckobjekt class_object (myClass)

Welche gibt die folgende Ausgabe zurück:

Zusätzlich zu anderen Operationen können Sie normalerweise auf Objekte angewendet werden.

Metaklassen

Vielleicht sind Sie auf die gekommen Art Stichwort in Python? Sie haben es höchstwahrscheinlich verwendet, um den Typ eines Objekts zu überprüfen, wie in den folgenden Beispielen gezeigt:

Druckart ('abder') Druckart (100) Druckart (100.0) Druckart (int)

In diesem Fall erhalten Sie folgende Ausgabe:

   

Bei der Ausgabe scheint alles ziemlich klar zu sein, bis Sie zu dem Typ kommen Art. Um zu sehen, was das bedeuten könnte, gehen wir zurück zu unserer Klasse, die wir zu Beginn dieses Artikels definiert haben:

Klasse myClass (Objekt): pass

Jetzt mache folgendes:

Druckart (myClass)

Was wäre die Ausgabe dieser Aussage? Es wird überraschend sein:

Wir können also schließen, dass der Typ von Klassen in Python ist Art!

Wie ist das Verhältnis zwischen a Art und ein Metaklasse? Nun, a Art ist ein Metaklasse, sofern die Standardeinstellung Metaklasse ist Art. Ich weiß, dass dies verwirrend sein kann, besonders das Art kann verwendet werden, um die Klasse eines Objekts wie oben gezeigt zurückzugeben, dies ist jedoch auf die Rückwärtskompatibilität in Python zurückzuführen. Also, wenn Sie schreiben:

Drucktyp (Typ)

Sie erhalten:

Bedeutet das a Art ist ein Art!

Der Begriff Metaklasse bedeutet einfach etwas verwendet, um Klassen zu erstellen. Mit anderen Worten, es ist die Klasse einer Klasse, was bedeutet, dass die Instanz einer Klasse in diesem Fall eine Klasse ist. Somit, Art gilt als a Metaklasse seit der Instanz von a Art ist eine Klasse.

Wenn wir zum Beispiel die folgende Aussage oben erwähnt haben:

class_object = myClass ()

Dadurch wird einfach ein Objekt / eine Instanz der Klasse erstellt meine Klasse. Mit anderen Worten, wir haben eine Klasse verwendet, um ein Objekt zu erstellen. 

In der gleichen Weise, als wir folgendes getan haben:

Klasse myClass (Objekt): pass

Das Metaklasse wurde verwendet, um die Klasse zu erstellen meine Klasse (was als a betrachtet wird Art). So wie das Objekt eine Instanz einer Klasse ist, ist eine Klasse eine Instanz von a Metaklasse.

Verwenden von Metaclass zum Erstellen einer Klasse

In diesem Abschnitt werden wir sehen, wie wir a verwenden können Metaklasse eine Klasse erstellen, anstatt die Klasse Anweisung, wie wir es im Tutorial für Klassen und Objekte gesehen haben. Wie wir oben gesehen haben, ist der Standardwert Metaklasse ist Art. Daher können wir die folgende Anweisung verwenden, um eine neue Klasse zu erstellen:

new_class = type ('myClass', (), ) 

Wenn Sie die Dinge einfacher machen möchten, können Sie denselben Klassennamen vergeben meine Klasse auf den Variablennamen.

Das Wörterbuch Hier werden die Attribute der Klasse definiert. Also mit der folgenden Aussage:

myClass = type ('myClass', (), 'a': True)

Ist ähnlich wie:

Klasse myClass (Objekt): a = True

Das __metaclass__-Attribut

Sagen wir, dass wir die Klasse erstellt haben meine Klasse wie folgt:

Klasse myClass (Objekt): __metaclass__ = myMetaClass-Pass

In diesem Fall erfolgt die Klassenerstellung mit myMetaClass anstatt Art, wie folgt:

myClass = myMetaClass (Klassenname, Basen, Wörterbuch)

Erstellung und Initialisierung einer Metaklasse

Wenn Sie die Kontrolle darüber haben möchten, wie Sie erstellen und initialisieren Nach der Erstellung einer Klasse können Sie die Metaklasse einfach verwenden __Neu__ Methode und __drin__ Konstruktor. Also wann myMetaClass oben heißt, so wird es hinter den Kulissen geschehen:

myClass = myMetaClass .__ new__ (myMetaClass, Name, Basen, Wörterbuch) myMetaClass .__ init__ (MyClass, Name, Basen, Wörterbuch)

Ich möchte diesen schnellen Tipp nicht länger machen, aber zusammenfassend können wir daraus schließen, dass a Metaklasse wird in Python zum Erstellen einer Klasse verwendet. Das ist der Fall von a Metaklasse ist eine Klasse. Wenn Sie tiefer in die Metaklassen eintauchen möchten, können Sie dieses Tutorial ausprobieren.