Maison >développement back-end >Tutoriel Python >Description détaillée de la métaclasse de python
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 classeobjet
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!