Ich habe eine Klasse, die eine output() -Methode hat, die eine Matplotlib-Figur -Instanz zurückgibt. Ich habe einen Dekorateur, den ich geschrieben habe und der diese Feigeninstanz zu einem Django-Antwortobjekt macht.Übergabe von Schlüsselwortargumenten an einen Klassenmethode-Decorator
Mein Dekorateur sieht wie folgt aus:
class plot_svg(object):
def __init__(self, view):
self.view = view
def __call__(self, *args, **kwargs):
print args, kwargs
fig = self.view(*args, **kwargs)
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/svg+xml')
canvas.print_svg(response)
return response
und das ist, wie es verwendet wurde:
def as_avg(self):
return plot_svg(self.output)()
Der einzige Grund, warum ich es auf diese Weise statt mit dem „@“ Syntax ist denn wenn ich es mit dem "@" zu tun:
@plot_svg
def as_svg(self):
return self.output()
ich diesen Fehler:
Ich versuche, dies zu beheben, indem ich es in die "@" - Syntax setze, aber ich kann nicht herausfinden, wie es funktioniert. Ich denke, es hat etwas zu tun mit self
nicht bekommen, wo es soll ...
Ich bin durch Ihre Antwort verwirrt. Ich hatte gedacht, dass die Substitution der erwarteten lexikalischen Substitution entspricht. Also: @plot_svg (view = eine_sicht) def some_func (some_args): ... -> (minus Zwischenvariablen/Bindungen) def some_func (some_args): ... a_plot_instance = plot_svg .__ init __ (view = some_view) some_func = a_plot_instance .__ Aufruf __ (some_args) Können Sie das klären? Und ich hasse fehlende Formatierung von Kommentaren. –
@ charles.merriam: da ** ist ** Kommentar Formatierung. Verwenden Sie \ * \ * für ** Fett **, \ * für * Kursivschrift *, Backticks (\ ') für' Code', etc ... Sie müssen jetzt möglicherweise einen umgekehrten Schrägstrich verwenden ... – ChristopheD
Ich bin verwirrt durch deine Antwort. Ich hatte gedacht, dass die Substitution der erwarteten lexikalischen Substitution entspricht. Also: '@plot_svg (view = some_view)' \ n 'def einige_func (some_args): ...' \ n -> (minus Zwischenvariablen/Bindungen) \ n 'def some_func (some_args): ... '\ n ' a_plot_instance = plot_svg .__ init __ (Ansicht = Some_view) '\ n ' some_func = a_plot_instance .__ Aufruf __ (some_args) '\ n Kannst du das klären? –