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.
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.
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
.
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
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)
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.