Ich arbeite an einem Pyramiden-Tutorial, aber es gibt viele Dinge, die ich nicht weiß.
Vorerst ist eine Quelle mit einem @ herausgekommen. Wenn ich Java verwende, denke ich, dass es eine Anmerkung ist. Das ist nicht der Fall, und als ich es nachgeschlagen habe, war es ein Dekorateur.
Dekorateure werden zum Umwickeln von Objekten verwendet. [Entwurfsmuster](http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3% 82% BF% E3% 83% BC% E3% 83% B3_% 28% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2% 29) Richtig.
Es scheint also, dass der Dekorator in Python als Funktion bereitgestellt wird. Ich habe eine einfache Quelle mit einem Dekorateur geschrieben.
#Dekorateur (vor der Funktion zu dekorieren"before",hinter"after"Zur Ausgabe)
def deco_test(func):
def wrapper(arg):
print("before")
func(arg)
print("after")
return wrapper
#Funktioniert mit Dekorateuren@Rufen Sie den Dekorateur mit.
@deco_test
def hello(arg):
print("Hello, " + arg)
hello("world!")
Das Ausführungsergebnis ist wie folgt. before Hello, world! after
Übrigens kann die Hallo-Funktion mit dem Dekorator durch die folgende Funktion ersetzt werden.
def hello(arg):
print("Hello, " + arg)
hello = deco_test(hello)
Anfangs war ich mir nicht sicher, aber nachdem ich verschiedene Dinge ausprobiert hatte, Python hat stark gelernt, dass Funktionen auch Objekte sind. Die Funktion ist ein Argument. Wenn Sie also () zu der Variablen hinzufügen, in der die Funktion gespeichert ist, und sie ausführen.
Es scheint, dass Sie Programme sehr flexibel schreiben können, Es wird dynamisch eingegeben, und wenn Sie es nicht richtig benennen, Es scheint, dass ein Code, der sehr schwer zu verstehen ist, vervollständigt wird.
Der Code, der im Pyramiden-Tutorial veröffentlicht wurde, lautet übrigens wie folgt
@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(request):
try:
one = DBSession.query(MyModel).filter(MyModel.name == 'one').first()
except DBAPIError:
return Response(conn_err_msg, content_type='text/plain', status_int=500)
return {'one': one, 'project': 'tutorial'}
Ich war ein wenig besorgt, weil diese view_config der Klassenname war, Der @ -Teil ist eine Instanzerstellung und ein Argument wird an init übergeben. Die Dekorationsfunktion my_view ist in den Instanzaufruf call eingeschlossen.
Ich denke, das bedeutet es, aber die Überprüfung kommt wieder.
Recommended Posts