2016-05-27 33 views
0

Die übliche Konstrukt für einen Dekorateur in Python istPython Dekorateur über etwas anderes als def

@decorator 
def function(x): 
    <code here> 

, die

entspricht
def function(x): 
    <code here> 
function = decorator(function) 

(Zumindest, das ist mein Verständnis ist.) Nun nehmen wir an haben eine Funktion mystery_func, die wir nicht selbst definiert haben, aber wir möchten immer noch mit decorator dekorieren. Können wir

@decorator 
mystery_func 

oder tun wir

mystery_func = decorator(mystery_func) 

bekommen die gleiche Wirkung wie

@decorator 
def mystery_func(args): 
    <code here> 
+4

Das ist nicht eine Frage erforderlich war, konnte man nur diese in kürzerer Zeit in einem interaktiven Interpreter getestet haben, als es dauerte um die Frage zu stellen. – ShadowRanger

+0

Falls Sie keine Python-Installation haben, ist [Ideone] (http://ideone.com/) gut für nicht-interaktive Tests und [PythonAnywhere's "Try IPython" Online-Sache] (https: // www. pythonanywhere.com/try-ipython/) bietet Ihnen eine Online-IPython-Umgebung, die normalerweise sogar besser ist als ein normaler interaktiver Python-Interpreter. – user2357112

+0

@ShadowRanger Es ist immer noch eine gültige Frage, vielleicht hat der 'OP' nichts über' Klassen'-Dekoratoren gewusst, was etwas anderes als 'def' ist – jamylak

Antwort

1

Die Antwort tun müssen, ist nicht, kann die @ Syntax nicht mit beliebigen Linien verwendet werden, , müssen Sie mystery_func = decorator(mystery_func) verwenden. Verwenden Sie die @ Syntax wie folgt: SyntaxError.

0

können Sie auch class decorators verwenden, die "etwas anderes als def" ist:

zB.

@foo 
@bar 
class A: 
    pass 

Aber was Sie hier erwähnt:

@decorator 
mystery_func 

ein SyntaxError ist

Verwandte Themen