Maison  >  Article  >  développement back-end  >  Qu'est-ce qu'une métaclasse en Python

Qu'est-ce qu'une métaclasse en Python

little bottle
little bottleoriginal
2019-05-24 17:36:314142parcourir

La métaclasse en python fait référence à l'objet utilisé pour créer une classe. La fonction type() en python est en fait une métaclasse. La fonction type() est utilisée pour créer des métaclasses de toutes les classes. Si vous souhaitez créer une métaclasse personnalisée, vous devez également hériter du type.

Qu'est-ce qu'une métaclasse en Python

En python, les classes sont aussi des objets Lorsque nous utilisons le mot-clé class pour créer une classe, l'interpréteur Python analyse simplement la syntaxe de la définition de la classe. appelez la fonction type() pour créer la classe. Alors, savez-vous ce qui crée une classe ? En fait, c'est une métaclasse.

Qu'est-ce qu'une métaclasse ?

Les métaclasses sont en fait des objets utilisés pour créer des classes.

Pour nous aider à comprendre, nous pouvons y penser de cette façon, Nous créons des classes pour créer des instances de classes, et de la même manière, nous créons des métaclasses pour créer des classes.

Une métaclasse est une classe (instance) , comme ceci :

Metaclass() = class
class() = object # object==>实例

Pour comprendre ce qu'est une métaclasse, jetons un coup d'œil à la fonction type ().

En fait, type est une métaclasse, et type est la métaclasse que nous utilisons pour créer toutes les classes. (Si nous voulons créer notre propre métaclasse définie, nous devons également hériter du type)

Comment fonctionnent les métaclasses :

Jetons un coup d'œil dans ce qui suit exemple

class ReedSunMetaclass(type):
    pass
class Foo(object, metaclass = ReedSunMetaclass): 
    pass
class Bar(Foo):
    pass

D'abord , nous créons une métaclasse ReedSunMetaclass

(Remarque ! Selon la convention par défaut, le nom de classe de la métaclasse se termine toujours par Metaclass, de sorte que clairement indique qu'il s'agit d'une métaclasse).

Ensuite , nous créons une classe Foo en utilisant la métaclasse ReedSunMetaclass.

(En même temps, l'attribut __metaclass__ de la classe Foo devient ReedSunMetaclass).

Enfin , nous créons une sous-classe Bar qui hérite de Foo.

Essayons de comprendre comment ces étapes sont effectuées dans python :

Pour la classe parent Foo, Python recherchera _ dans la définition de la classe, si. trouvé, Python l'utilisera pour créer la classe Foo, s'il n'est pas trouvé, il utilisera le type intégré pour créer cette classe. Apparemment, on l'a trouvé.

Pour la sous-classe Bar, python recherchera d'abord l'attribut __metaclass__ dans la sous-classe. S'il est trouvé, Python l'utilisera pour créer la classe Bar. S'il n'est pas trouvé, il recherchera à nouveau dans la classe parent. taper. Apparemment, on le trouve dans la classe parent.

Nous pouvons voir un avantage à utiliser des métaclasses, c'est-à-dire qu'elles permettent aux sous-classes d'hériter implicitement de quelque chose.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn