"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Python Metaclass Principe de travail et création et personnalisation de classe

Python Metaclass Principe de travail et création et personnalisation de classe

Publié le 2025-04-16
Parcourir:687

How Do Metaclasses Work in Python to Create and Customize Classes?

Que sont les métaclasses dans python?

Les métaclasses sont responsables de la création d'objets de classe dans python. Tout comme les classes créent des instances, les métaclasses créent des classes. Ils fournissent une couche de contrôle sur le processus de création de classe, permettant de personnaliser le comportement et les attributs de classe.

Comprendre le concept des classes en tant qu'objets

Dans Python, les classes sont des objets qui décrivent le Blueprint pour créer de nouvelles instances ou objets. Cela signifie que les classes elles-mêmes sont des instances créées à partir d'une «description» de la classe à l'aide du mot-clé de classe. Ainsi, l'instruction suivante crée un objet de classe nommé objetCreator:

class ObjectCreator(object):
    pass

Création de classes dynamiquement

Étant donné que les classes sont des objets, vous pouvez les créer dynamiquement, même au moment de l'exécution. La fonction de type vous permet de définir une classe en fournissant son nom, ses bases et ses attributs comme arguments. Il renvoie un objet de classe nouvellement créé.

Foo = type('Foo', (), {'bar': True})
print(Foo)  # 
print(Foo.bar)  # True

metaclasses (la classe de classes)

maintenant, nous arrivons à Metaclasses. Ce sont les «trucs» qui crée ces objets de classe. Tout comme les classes créent des instances, les métaclasses créent des classes. Ce sont effectivement les classes dans les coulisses que Python utilise automatiquement pour créer des classes définies à l'aide du mot-clé de classe.

L'attribut metaclass

dans Python 2, vous pouvez spécifier un attribut __Metaclass__ lors de la définition d'une classe pour utiliser une métaclasse personnalisée pour créer cette classe. Dans Python 3, cela a été remplacé par un argument de mot-clé dans la liste des classes de base.

# python 2 classe foo (objet, __Metaclass __ = mymetaclass): ... # Python 3 classe foo (objet, metaclass = mymetaclass): ...
# Python 2
class Foo(object, __metaclass__=MyMetaclass):
    ...

# Python 3
class Foo(object, metaclass=MyMetaclass):
    ...
Metaclasses personnalisées en action

Un métaclass peut modifier la classe qu'il crée, permettant un comportement dynamique de classe. Par exemple, vous pouvez définir un métaclass qui convertit automatiquement tous les attributs de classe en uppercase:

classe supérieureAtTrMetaclass (type): Def __New __ (CLS, CLSNAME, BASES, ATRS): uppercase_attrs = { attR si att.startswith ('__') else att.upper (): v pour att, v dans att.items () } return super () .__ new __ (cls, clsname, bases, uppercase_attrs)
# Python 2
class Foo(object, __metaclass__=MyMetaclass):
    ...

# Python 3
class Foo(object, metaclass=MyMetaclass):
    ...
alors, vous pouvez utiliser ce métaclass pour créer une classe avec des attributs en majuscules:

class foo (objet, metaclass = upperArTrMetAlass): bar = 'bip' print (foo.bar) # 'bip'
# Python 2
class Foo(object, __metaclass__=MyMetaclass):
    ...

# Python 3
class Foo(object, metaclass=MyMetaclass):
    ...
Pourquoi utiliser des métaclasses?

Bien que vous n'ayez généralement pas besoin de métaclasses, ils trouvent des cas d'utilisation pour créer des API qui abstraitent la complexité de l'altération de classe derrière une interface simple. Par exemple, ORM de Django utilise des métaclasses pour vous permettre de définir des champs de base de données à l'aide de instructions simples comme Charfield et IntegerField.

Conclusion

Les métaclasses dans Python sont un outil puissant qui vous donne le contrôle sur la création de la classe. Cependant, il est important de noter qu'ils sont complexes et ne doivent être utilisés que lorsque cela est nécessaire pour éviter les complications inutiles.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3