Dies ist Python 2.5, es ist GAE auch nicht, dass es darauf ankommt.Python-Klassen-Methoden dekorieren, wie übertrage ich die Instanz an den Dekorator?
Ich habe den folgenden Code, ich dekoriere die foo() -Methode in bar, mit der Dec_check-Klasse als Dekorateur.
class dec_check(object):
def __init__(self, f):
self.func = f
def __call__(self):
print 'In dec_check.__init__()'
self.func()
class bar(object):
@dec_check
def foo(self):
print 'In bar.foo()'
b = bar()
b.foo()
Wenn diese Ausführung Ich hatte gehofft, um zu sehen:
In dec_check.__init__()
In bar.foo()
Aber ich bin immer „TypeError: foo() takes exactly 1 argument (0 given)
“ als .foo()
, eine Objektmethode zu sein, nimmt sich selbst als Argument. Ich vermute, dass die Instanz bar
tatsächlich nicht existiert, wenn ich den Decorator-Code ausführe.
Wie also gebe ich eine Instanz von bar
an die Dekorator-Klasse?
ändern Sie die 'f (Selbst-)' Zeile zu 'return f (Selbst-)' die Rückkehr von 'foo' passiert zurück an den Anrufer. – j6m8
Link zur Deskriptor-Seite unterbrochen. – Apteryx