Was ist eine Metaklasse?
Durch die obige Einführung haben wir es endlich vage in die Metaklasse gebracht. Aber wir wissen immer noch nicht, was Metaklassen sind.
Wenn wir eine Klasse erstellen, besteht der größte Teil davon darin, ein Instanzobjekt der Klasse zu erstellen. Was ist mit Metaklassen? Metaklassen werden zum Erstellen von Klassen verwendet. Eine andere Möglichkeit, es zu verstehen, ist: Eine Metaklasse ist eine Klasse von Klassen.
Durch die Einführung der Funktion type() oben wissen wir, dass Klassen über die Funktion type() erstellt werden können:
MyClass = type('MyClass', (), {})
Tatsächlich ist die Funktion type() eine Metaklasse. type() ist die Metaklasse, die Python im Hintergrund verwendet, um alle Klassen zu erstellen.
Jetzt können wir also auch erraten, warum die Funktion type() Typ und nicht Typ ist?
Dies dient wahrscheinlich der Konsistenz mit str, der Klasse, die zum Erstellen von String-Objekten verwendet wird, und int, der Klasse, die zum Erstellen von Integer-Objekten verwendet wird. Typ ist die Klasse, die das Klassenobjekt erstellt. Sie können dies erkennen, indem Sie das Attribut __class__ überprüfen. Alles in Python, aufgepasst, hier meine ich alles, es sind Objekte. Dazu gehören Ganzzahlen, Zeichenfolgen, Funktionen und Klassen. Sie sind alle Objekte und werden alle aus einer Klasse erstellt.
# 整形 age = 23 print(age.__class__) # 字符串 name = '两点水' print(name.__class__) # 函数 def fu(): pass print(fu.__class__) # 实例 class eat(object): pass mEat = eat() print(mEat.__class__)
Das Ausgabeergebnis lautet wie folgt:
<class 'int'> <class 'str'> <class 'function'> <class '__main__.eat'>
Wie Sie sehen können, ist alles oben, das heißt, alle Objekte werden durch Klassen erstellt, dann sind wir vielleicht neugierig, __class__ von __class__ Was könnte es sein? Mit anderen Worten: Welche Klassen erstellen diese Klassen?
Wir können weiterhin den folgenden Code basierend auf dem obigen Code hinzufügen:
print(age.__class__.__class__) print(name.__class__.__class__) print(fu.__class__.__class__) print(mEat.__class__.__class__)
Die Ausgabeergebnisse lauten wie folgt:
<class 'type'> <class 'type'> <class 'type'> <class 'type'>
Beobachten Sie das Obige sorgfältig und klären Sie es erneut Ausgabe Das Ergebnis ist das Ergebnis des Druckens des ganzzahligen Alters, des Charaktererstellungsnamens, der Funktion fu und __class__ von __class__ in der Objektinstanz mEat. Man kann auch sagen, dass die Klasse die Ergebnisse ihrer Klasse ausgibt. Es wurde festgestellt, dass die gedruckten Klassen alle vom Typ sind.
Wie eingangs erwähnt sind Metaklassen Klassen von Klassen. Mit anderen Worten: Eine Metaklasse ist für die Erstellung einer Klasse verantwortlich. Sie können auch verstehen, dass die Metaklasse für die Generierung von Klassen verantwortlich ist. Und Typ ist die integrierte Metaklasse. Das heißt, Pythons eigene Metaklasse.