Maison >développement back-end >Tutoriel Python >Description détaillée de la métaclasse de python

Description détaillée de la métaclasse de python

高洛峰
高洛峰original
2017-03-16 16:57:441335parcourir

Les métaclasses sont généralement utilisées pour créer des classes. Lors de l'exécution d'une définition de classe, l'interpréteur doit connaître la métaclasse correcte de la classe. L'interpréteur recherchera d'abord la classeattributmetaclass Si cet attribut existe, il attribuera cet attribut à cette classe comme métaclasse. Si cet attribut n'est pas défini, il recherchera la métaclasse dans la classe parent. Si l'attribut métaclasse n'est pas encore trouvé, l'interpréteur vérifiera la variable globale nommée métaclasse, et si elle existe, l'utilisera. comme la métaclasse. Sinon, la classe est une classe traditionnelle, avec types.ClassType comme métaclasse.

Lors de l'exécution de la définition de la classe, la métaclasse correcte (généralement par défaut) de cette classe sera vérifiée. La métaclasse transmet (généralement) trois paramètres (au constructeur) : le nom de la classe, à partir de la classe de base Hérite d'un tuple de données et d'un dictionnaire d'attributs (de classe).

Quand la métaclasse est-elle créée ?

#!/usr/bin/env python  
   
print '1. Metaclass declaration'  
class Meta(type):  
    def init(cls, name, bases, attrd):  
        super(Meta,cls).init(name,bases,attrd)  
        print '3. Create class %r' % (name)  
   
print '2. Class Foo declaration'  
class Foo(object):  
    metaclass=Meta  
    def init(self):  
        print '*. Init class %r' %(self.class.name)  
   
# 何问起 hovertree.com
print '4. Class Foo f1 instantiation'  
f1=Foo()  
   
print '5. Class Foo f2 instantiation'  
f2=Foo()  
   
print 'END'  
输出

Résultat :

1. Déclaration de métaclasse

2. Déclaration de classe Foo

3. Créer la classe 'Foo'

4. Instanciation de classe Foo f1

*. Init classe 'Foo'

5. Instanciation de classe Foo f2

*. >END

On voit que lorsque la classe est déclarée, les méthodes de la métaclasse sont exécutées. À l'avenir, lorsque la classe

objet

est définie, seule la méthode init() de. la classe, MetaClass, est appelée. Le init() n'est exécuté qu'une seule fois lorsque la classe est déclarée.

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