Ich versuche, einen Dekorator zu schreiben, der sowohl zu Instanzmethoden als auch zu Nicht-Instanzmethoden hinzugefügt werden kann. Ich habe meinen Code auf ein Minimum Beispiel reduziert, dass mein PunktDekorator, der sich selbst
def call(fn):
def _impl(*args, **kwargs):
return fn(*args, **kwargs)
fn.call = _impl
return fn
class Foo(object):
@call
def bar(self):
pass
Foo().bar.call()
Traceback (most recent call last):
File "/tmp/511749370/main.py", line 14, in <module>
Foo().bar.call()
File "/tmp/511749370/main.py", line 3, in _impl
return fn(*args, **kwargs)
TypeError: bar() missing 1 required positional argument: 'self'
Ist es möglich, etwas zu tun, wie dies ohne auf
Foo.bar.call(Foo())
Dies gibt dem schönen Fehler zeigt, Oder ist das meine einzige Option?
Schauen Sie sich die Lösung bei: https://stackoverflow.com/questions/7590682/access-self-from-decorator. Ich weiß, es ist nicht das exakt gleiche Problem, aber es könnte hilfreich sein. – Idan
@IdanMeyer Ich habe versucht, "self" als Parameter zu '_impl' hinzuzufügen, aber das hat den Fehler einfach auf' _impl() verschoben, das 1 benötigtes Positionsargument: 'self', und ich habe es mit 'fn .__ self__' versucht löst einen 'AttributeError' aus. –