Dekoratoren, die auf die Klassendefinition mit Python angewendet wurden

7

Im Vergleich zu Dekoratoren, die auf eine Funktion angewendet werden, ist es nicht einfach, die auf eine Klasse angewendeten Dekoratoren zu verstehen.

%Vor%

Was ist der Anwendungsfall von Dekoratoren für eine Klasse? Wie man es benutzt?

    
prosseek 05.10.2010, 02:51
quelle

2 Antworten

23

Es ersetzt die große Mehrheit der klassischen Anwendungen für benutzerdefinierte Metaklassen auf einfachere Weise.

Denken Sie so darüber nach: Nichts, was direkt im Klassenkörper ist, kann auf das Klassenobjekt verweisen, weil das Klassenobjekt erst lange nach der Ausführung des Körpers existiert (es ist der Auftrag der Metaklasse, das Klassenobjekt zu erstellen). normalerweise type , für alle Klassen ohne benutzerdefinierte Metaklasse).

Aber der Code im Klassendekorator führt aus, nachdem das Klassenobjekt erzeugt wurde (tatsächlich mit dem Klassenobjekt als Argument!) und kann daher perfekt auf dieses Klassenobjekt verweisen (und normalerweise muss dies tun).

Betrachten Sie zum Beispiel:

%Vor%

und jetzt können Sie sich auf Color.red , Color.green und & amp; c beziehen, anstatt auf 0 , 1 usw. (Natürlich würden Sie normalerweise noch mehr Funktionalität hinzufügen, um "an% co_de" zu machen % ", aber hier zeige ich nur die einfache Möglichkeit, diese Funktionalität in einen Klassen-Dekorator einzufügen, anstatt eine benutzerdefinierte Metaklasse zu benötigen! -)

    
Alex Martelli 05.10.2010, 02:55
quelle
6

Ein Anwendungsfall, den ich mir vorstellen kann, ist, wenn Sie alle Methoden einer Klasse mit einem Funktionsdekorator umhüllen wollen. Angenommen, Sie haben den folgenden Dekorateur:

%Vor%

Und die folgende Klasse:

%Vor%

Sie können alle Methoden dekorieren:

%Vor%

Aber das ist LAME! Stattdessen können Sie dies tun:

%Vor%

UPDATE: Eine allgemeinere Version von logall :

%Vor%

Volle Enthüllung: Ich musste das nie tun und ich habe dieses Beispiel gerade gemacht.

    
Claudiu 05.10.2010 03:59
quelle

Tags und Links