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.
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
É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
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.
# 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
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?
Conclusion
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