Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Beschreibung der Metaklasse von Python

Detaillierte Beschreibung der Metaklasse von Python

高洛峰
高洛峰Original
2017-03-16 16:57:441296Durchsuche

Metaklassen werden im Allgemeinen zum Erstellen von Klassen verwendet. Beim Ausführen einer Klassendefinition muss der Interpreter die richtige Metaklasse der Klasse kennen. Der Interpreter sucht zunächst nach dem KlassenAttributMetaKlasse. Wenn dieses Attribut vorhanden ist, weist er dieses Attribut dieser Klasse als Metaklasse zu. Wenn dieses Attribut nicht definiert ist, sucht es nach der Metaklasse in der übergeordneten Klasse. Wenn das Metaklassenattribut noch nicht gefunden wird, überprüft der Interpreter die globale -Variable mit dem Namen „Metaklasse“ und verwendet sie, falls vorhanden als Metaklasse. Andernfalls handelt es sich bei der Klasse um eine traditionelle Klasse mit „types.ClassType“ als Metaklasse.

Beim Ausführen der Klassendefinition wird die korrekte (normalerweise Standard-)Metaklasse dieser Klasse überprüft. Die Metaklasse übergibt (normalerweise) drei Parameter (an den Konstruktor): Klassenname, von der Basisklasse Erbt Datentupel und (Klassen-)Attributwörterbuch.

Wann wird die Metaklasse erstellt?

#!/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'  
输出

Ergebnis:

1. Metaklassen-Deklaration

3. Klasse „Foo“ erstellen >4. Klasse Foo f1 Instanziierung

* Klasse Foo f2 Instanziierung

END

Es ist ersichtlich, dass beim Deklarieren der Klasse die Methoden in der Metaklasse ausgeführt werden. Wenn das Klassenobjekt

in Zukunft definiert wird, wird nur die init()-Methode ausgeführt die Klasse, MetaClass Die init() in wird nur einmal ausgeführt, wenn die Klasse deklariert wird.

Das obige ist der detaillierte Inhalt vonDetaillierte Beschreibung der Metaklasse von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn