Wie kann ich alle Parameter Dekorateur passieren?
Frage
Ich habe versucht, die Ausführung einiger Methoden mit einem Dekorateur zu verfolgen. Hier ist der Dekorateur Code:
def trace(func):
def ofunc(*args):
func_name = func.__name__
xargs = args
print "entering %s with args %s" % (func_name,xargs)
ret_val = func(args)
print "return value %s" % ret_val
print "exiting %s" % (func_name)
return ofunc
Die Sache ist, wenn ich versuche, diesen Dekorateur Methoden anwenden, wird der Selbst Parameter nicht gesendet bekommen. Können Sie mir sagen, warum, und wie kann ich das Problem beheben?
Lösung
Diese Zeile ist falsch:
ret_val = func(args)
Sie vergessen die Argumentliste zu erweitern, wenn Sie es sind vorbei auf. Es sollte sein:
ret_val = func(*args)
Beispiel für eine Ausgabe mit dieser Änderung in Stelle:
>>> class Test2:
... @trace
... def test3(self, a, b):
... pass
...
>>> t = Test2()
>>> t.test3(1,2)
entering test3 with args (<__main__.Test2 instance at 0x7ff2b42c>, 1, 2)
return value None
exiting test3
>>>
Wenn Sie Ihren Dekorateur erweitern auch Keyword-Argumente zu nehmen, würden Sie auch die entsprechend erweitern müssen, wenn sie beim Passieren, **
verwendet wird.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow