Finden Sie alle dekorierten Funktionen in einem Modul

7

Kann man herausfinden, ob eine Funktion zur Laufzeit eingerichtet ist? ZB könnte ich alle Funktionen in einem Modul finden, die mit "Beispiel" dekoriert sind?

%Vor%     
TheDude 27.01.2010, 02:08
quelle

5 Antworten

9

Im allgemeinen Fall ist das nicht möglich, weil der example Dekorator keine zur Laufzeit erkennbare Kurve zurücklassen kann - zum Beispiel könnte sein

%Vor%

Wenn Sie die Quelle für example steuern, ist es natürlich einfach, die Funktionen, die sie schmückt, zu markieren oder aufzuzeichnen; Wenn Sie das nicht tun, ist es absolut unmöglich, das zu tun, was Sie wollen.

    
Alex Martelli 27.01.2010, 02:13
quelle
8

Da Sie angegeben haben, dass Sie die Kontrolle über den Wrapper-Code haben, hier ein Beispiel:

%Vor%     
John La Rooy 27.01.2010 03:36
quelle
3

Ich glaube nicht, dass es einen allgemeinen Weg gibt, da ein Decorator ein einfacher Funktionsaufruf ist. Ihr Code ist identisch mit diesem:

%Vor%

Sie können wahrscheinlich bestimmte Dekoratoren durch Disassemblieren und Analysieren erkennen (mit dem dis -Modul). Oder Sie könnten einfach die Quelldatei analysieren, obwohl das ein bisschen hässlich ist.

Warum wollen Sie sie überhaupt erkennen?

    
Max Shawabkeh 27.01.2010 02:14
quelle
0

Möglicherweise finden Sie in dieser letzten Frage detaillierte Informationen zu 3 Möglichkeiten, dies zu tun:

Wie bekomme ich alle Methoden einer Python-Klasse mit gegebenem Decorator

    
ninjagecko 06.05.2011 22:54
quelle
-1

Wenn Sie können, können Sie den Decorator zur Laufzeit anpassen, um festzustellen, welche Funktionen an ihn übergeben werden:

%Vor%     
Ignacio Vazquez-Abrams 27.01.2010 02:50
quelle

Tags und Links