Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
modul:m323:learningunits:lu05:decorator [2026/08/18 10:20] – Kompetenz-Tags auf neue Kompetenzmatrix ZH gesetzt adminmodul:m323:learningunits:lu05:decorator [2026/09/01 11:16] (aktuell) – Animation zum @-Operator und zum Decorator mit Parameter eingebettet admin
Zeile 52: Zeile 52:
  
 In diesem Beispiel ist ''decorator_function'' der Decorator, der die ''display''-Funktion erweitert. Der "@"-Operator ist [[https://de.wikipedia.org/wiki/Syntaktischer_Zucker|syntaktischer Zucker]] für ''display = decorator_function(display)''. In diesem Beispiel ist ''decorator_function'' der Decorator, der die ''display''-Funktion erweitert. Der "@"-Operator ist [[https://de.wikipedia.org/wiki/Syntaktischer_Zucker|syntaktischer Zucker]] für ''display = decorator_function(display)''.
 +
 +===== Animation: was das @-Zeichen wirklich tut =====
 +
 +Die Animation zeigt genau diese Zuweisung im Speicher: wie der Name der dekorierten Funktion auf den Wrapper **umgehängt** wird und das Original danach nur noch über die Closure erreichbar ist. Der zweite Tab nimmt den Fall aus dem Abschnitt "Decorators mit eigenen Parametern" vorweg und zeigt die drei Ebenen.
 +
 +{{url>https://templates-python.github.io/m323_html/lu05/decorator.html 100%,940px noborder|Animation: Decorators, was das @-Zeichen wirklich tut}}
 +
 +Voraussetzung dafür ist das Speichermodell aus [[modul:m323:learningunits:lu05:closures|LU05c - Closures]]: der Wrapper ist eine Closure über die ursprüngliche Funktion.
  
 ==== Verwendung von Decorators ==== ==== Verwendung von Decorators ====
Zeile 99: Zeile 107:
     return factorial     return factorial
 </code> </code>
 +
 +<WRAP center round tip 80%>
 +Nach dem Dekorieren heisst die Funktion intern ''wrapper_function'': ''calculate_factorial.__name__'' ergibt nicht mehr den ursprünglichen Namen. Wer das vermeiden will, setzt ''@functools.wraps(original_function)'' auf die ''wrapper_function'' – das kopiert Name und Docstring vom Original herüber.
 +</WRAP>
  
 ===== Decorators mit eigenen Parametern ===== ===== Decorators mit eigenen Parametern =====
Zeile 150: Zeile 162:
 {{tag>M323-LU05 M323-C2A}} {{tag>M323-LU05 M323-C2A}}
 [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi  [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi 
 +
  • modul/m323/learningunits/lu05/decorator.txt
  • Zuletzt geändert: 2026/09/01 11:16
  • von admin