Cette astuce donne un bref aperçu de ce que nous entendons par métaclasse en Python et donne quelques exemples du concept..
Avant de plonger dans cet article, je voudrais signaler un point important concernant les classes en Python, qui nous permet de mieux comprendre le concept de métaclasse..
Si vous avez utilisé un langage de programmation autre que Python, le concept que vous avez compris à propos des classes est très probablement le moyen utilisé pour créer de nouveaux objets. Ceci est également vrai en Python, mais Python va encore plus loin, car les classes sont également considérées comme des objets.!
Donc, si vous avez créé la classe suivante en Python:
classe myClass (objet): pass
Cela signifie simplement qu'un objet avec le nom Ma classe
a été créé en mémoire. Depuis que cet objet est capable de créer de nouveaux objets, il est considéré comme un classe. Cela signifie que nous pouvons appliquer des opérations d'objet sur des classes en Python, car les classes sont des objets eux-mêmes..
Nous pouvons donc faire des opérations sur les classes comme assigner la classe à une variable, comme suit:
class_object = myClass () print class_object
Qui retourne:
<__main__.myClass object at 0x102623610>
Vous pouvez même passer la classe Ma classe
en tant que paramètre d'une méthode, comme suit:
def class_object (object): print object class_object (myClass)
Ce qui retourne la sortie suivante:
En plus d'autres opérations que vous pouvez normalement appliquer sur des objets.
Peut-être avez-vous rencontré le type
mot-clé en Python? Vous l'avez probablement utilisé pour vérifier le type d'un objet, comme illustré dans les exemples suivants:
type d'impression ('abder') type d'impression (100) type d'impression (100.0) type d'impression (int)
Dans ce cas, vous obtiendrez le résultat suivant:
En regardant la sortie, tout semble assez clair jusqu'à ce que vous arriviez au type type
. Pour voir ce que cela pourrait signifier, revenons à notre classe que nous avons définie au début de cet article:
classe myClass (objet): pass
Maintenant, procédez comme suit:
type d'impression (myClass)
Quelle serait la sortie de cette déclaration? Ce sera étonnamment:
Donc, nous pouvons conclure que le type de classes en Python est type
!
Quelle est la relation entre un type
et un métaclasse
? Bien, un type
est un métaclasse
, à condition que le défaut métaclasse
est type
. Je sais que cela peut être déroutant, surtout que type
peut être utilisé pour retourner la classe d'un objet comme indiqué ci-dessus, mais cela est dû à la compatibilité avec les versions antérieures de Python. Donc, si vous écrivez:
type d'impression (type)
Tu auras:
Ce qui signifie qu'un type
est un type
!
Le terme métaclasse
signifie simplement quelque chose utilisé pour créer des classes. En d'autres termes, il s'agit de la classe d'une classe, ce qui signifie que l'instance d'une classe dans ce cas est une classe. Ainsi, type
est considéré comme un métaclasse
depuis l'instance d'un type
est une classe.
Par exemple, lorsque nous avons mentionné la déclaration suivante ci-dessus:
class_object = myClass ()
Cela construit simplement un objet / instance de la classe Ma classe
. En d'autres termes, nous avons utilisé une classe pour créer un objet.
De la même manière, quand nous avons fait ce qui suit:
classe myClass (objet): pass
le métaclasse
a été utilisé pour créer la classe Ma classe
(qui est considéré comme un type
). Donc, comme l’objet étant une instance d’une classe, une classe est une instance d’un métaclasse
.
Dans cette section, nous allons voir comment utiliser un métaclasse
pour créer une classe, plutôt que d'utiliser le classe
déclaration que nous avons vu dans le tutoriel classes et objets. Comme nous l'avons vu ci-dessus, le défaut métaclasse
est type
. Ainsi, nous pouvons utiliser l'instruction suivante pour créer une nouvelle classe:
new_class = type ('myClass', (), )
Si vous voulez simplifier les choses, vous pouvez attribuer le même nom de classe. Ma classe
au nom de la variable.
Le dictionnaire ici est utilisé pour définir les attributs de la classe. Donc, ayant la déclaration suivante:
myClass = type ('myClass', (), 'a': True)
Est similaire à:
classe myClass (objet): a = True
Disons que nous avons créé la classe Ma classe
comme suit:
classe myClass (objet): __metaclass__ = passe myMetaClass
Dans ce cas, la création de classe aura lieu en utilisant myMetaClass
au lieu de type
, comme suit:
myClass = myMetaClass (className, bases, dictionnaire)
Si vous voulez avoir le contrôle sur la façon dont vous créer et initialiser une classe après sa création, vous pouvez simplement utiliser la métaclasse __Nouveau__
méthode et __init__
constructeur, respectivement. Donc quand myMetaClass
ci-dessus est appelé, voici ce qui se passera dans les coulisses:
myClass = myMetaClass .__ new __ (myMetaClass, nom, bases, dictionnaire) myMetaClass .__ init __ (myClass, nom, bases, dictionnaire)
Je ne veux pas prolonger ce conseil rapide, mais pour résumer, nous pouvons conclure qu'un métaclasse
est utilisé en Python pour créer une classe. C'est, l'instance d'un métaclasse
est une classe. Si vous souhaitez approfondir les métaclasses, vous pouvez consulter ce tutoriel..