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!