Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python -Utiliser la classe metaclass

Date de publication 4 oct. 2022
Une métaclasse en python permet de définir le comportement de l'objet enfant sur lequel il est défini. On retrouve la spécification sur la PEP 3115

Si on prend une classe vide et que l'on analyse son type
On remarque que MyClass est de type
type
Il hérite de la métaclasse type. Donc pour créer une nouvelle métaclasse on fait
Et pour appliquer cette metaclasse à une classe on la déclare ainsi
metaclass permet d'agir sur le dunder __new__ qui est appelé avant la création de l'objet.
Nous avons également vu qu'il doit hériter de type qui prend 3 paramètres :
  • name: nom de la classe
  • bases: tuple des classes parentes
  • attrs: dictionaire contenant les noms et valeurs des attributs
Donc si on veut simuler la création de notre instance MyClass depuis la métaclasse on fait
return super().__new__(cls, name, bases, dict)

Ce qui nous donnerait

Jusque là rien de bien nouveau. Mais si on veut modifier notre instance en ajoutant par exemple un attribut qui correspond à la date de création, on ferait
Ce mécanisme pourrait très bien être implémenté avec de l'héritage simple, c'est à vous de déterminer ce qui est le plus adapté en fonction de votre besoin et du contexte.

On pourrait très bien imaginer une métaclasse qui associe un attribut à un logger

On vient de voir comment type permet de créer des instances de classe et comment vous pouvez vous aussi personnaliser ces objets
blog comments powered by Disqus