Verwenden Sie M...LOGIN

Verwenden Sie Metaklassen

Es ist endlich Zeit, Metaklassen zu verwenden, aber im Allgemeinen verwenden wir sie überhaupt nicht. Wie Tim Peters, der Leiter der Python-Community, sagte:

Metaklassen sind die Magie der Tiefe, 99 % davon Benutzer sollten sich darüber überhaupt keine Sorgen machen müssen. Wenn Sie sich fragen, ob Sie eine Metaklasse benötigen, brauchen Sie sie nicht. Wer Metaklassen tatsächlich verwendet, weiß genau, was sie tun müssen und muss nicht erklären, warum sie überhaupt verwendet werden.

Der Hauptzweck von Metaklassen ist die Erstellung von APIs. Ein typisches Beispiel ist Django ORM. Sie können es so definieren:

class Person(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()

Aber wenn Sie dies tun:

guy  = Person(name='bob', age='35')
print guy.age

wird kein IntegerField-Objekt zurückgegeben, sondern ein int, oder sogar direkt Daten von abrufen die Datenbank. Dies ist möglich, weil models.Model __metaclass__ definiert und mit etwas Magie die einfache Person-Klasse, die Sie gerade definiert haben, in einen komplexen Hook für die Datenbank umwandelt. Das Django-Framework vereinfacht diese scheinbar komplexen Dinge, indem es mithilfe von Metaklassen eine einfache API bereitstellt, über die der Code neu erstellt wird und die eigentliche Arbeit hinter den Kulissen erledigt wird.

Alles in Python ist ein Objekt, sie sind entweder eine Instanz einer Klasse oder einer Metaklasse, außer Typ. type ist eigentlich eine eigene Metaklasse, was in einer reinen Python-Umgebung nicht möglich ist. Dies geschieht durch einige Tricks auf der Implementierungsebene.

nächsten Abschnitt
KapitelKursunterlagen