Grâce à l'introduction ci-dessus, je l'ai finalement vaguement amené à la métaclasse. Mais nous ne savons toujours pas ce que sont les métaclasses.
Lorsque nous créons une classe, l'essentiel consiste à créer un objet instance de la classe. Et les métaclasses ? Les métaclasses sont utilisées pour créer des classes. Une autre façon de le comprendre est la suivante : une métaclasse est une classe de classes.
Grâce à l'introduction de la fonction type() ci-dessus, nous savons que des classes peuvent être créées via la fonction type() :
MyClass = type('MyClass', (), {})
En fait, la fonction type() est une métaclasse. type() est la métaclasse que Python utilise en arrière-plan pour créer toutes les classes.
Alors maintenant, nous pouvons également deviner pourquoi la fonction type() est type au lieu de Type ?
C'est probablement par souci de cohérence avec str, qui est la classe utilisée pour créer des objets chaîne, et int, qui est la classe utilisée pour créer des objets entiers. type est la classe qui crée l'objet de classe. Vous pouvez le voir en inspectant l'attribut __class__. Tout en Python, faites attention, ici je veux dire tout, ce sont des objets. Cela inclut les entiers, les chaînes, les fonctions et les classes. Ce sont tous des objets et ils sont tous créés à partir d’une classe.
# 整形 age = 23 print(age.__class__) # 字符串 name = '两点水' print(name.__class__) # 函数 def fu(): pass print(fu.__class__) # 实例 class eat(object): pass mEat = eat() print(mEat.__class__)
Le résultat de sortie est le suivant :
<class 'int'> <class 'str'> <class 'function'> <class '__main__.eat'>
Vous pouvez voir que tout ce qui précède, c'est-à-dire que tous les objets sont créés via des classes, nous pouvons donc être curieux, quelle est la __class__ de __class__ ? Autrement dit, quelles sont les classes qui créent ces classes ?
Nous pouvons continuer à ajouter le code suivant basé sur le code ci-dessus :
print(age.__class__.__class__) print(name.__class__.__class__) print(fu.__class__.__class__) print(mEat.__class__.__class__)
Le résultat de sortie est le suivant :
<class 'type'> <class 'type'> <class 'type'> <class 'type'>
Observez attentivement et clarifiez-le à nouveau. Le résultat de sortie ci-dessus est que nous modifions l'âge entier et le caractère. into name, Le résultat imprimé par __class__ de la fonction fu et de l'instance d'objet mEat. On peut aussi dire que la classe imprime les résultats de sa classe. On constate que les classes imprimées sont toutes typographiques.
Comme mentionné au début, les métaclasses sont des classes de classes. En d’autres termes, une métaclasse est un élément responsable de la création d’une classe. Vous pouvez également comprendre que la métaclasse est chargée de générer les classes. Et type est une métaclasse intégrée. C’est-à-dire la propre métaclasse de Python.
section suivante