Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m323:learningunits:lu05:decorator [2024/03/28 14:07] – angelegt - Externe Bearbeitung 127.0.0.1 | modul:m323:learningunits:lu05:decorator [2026/09/01 11:16] (aktuell) – Animation zum @-Operator und zum Decorator mit Parameter eingebettet admin | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| ==== Syntax ==== | ==== Syntax ==== | ||
| - | Die grundlegende Syntax für einen Decorator in Python ist die folgende: | ||
| + | <WRAP group> | ||
| + | <WRAP half column> | ||
| + | Die grundlegende Syntax für einen Decorator in Python ist die folgende: | ||
| <code python> | <code python> | ||
| def decorator_function(original_function): | def decorator_function(original_function): | ||
| Zeile 22: | Zeile 24: | ||
| def display(): | def display(): | ||
| print(" | print(" | ||
| + | |||
| + | display() | ||
| + | </ | ||
| + | |||
| + | <WRAP half column> | ||
| + | Semantisch ist '' | ||
| + | <code python> | ||
| + | def decorator_function(original_function): | ||
| + | def wrapper_function(): | ||
| + | # zusätzliche Funktionalitäten hier | ||
| + | original_function() | ||
| + | # weitere zusätzliche Funktionalitäten | ||
| + | return wrapper_function | ||
| + | |||
| + | def display(): | ||
| + | print(" | ||
| + | |||
| + | # das macht @decorator_function: | ||
| + | display = decorator_function(display) | ||
| display() | display() | ||
| </ | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| In diesem Beispiel ist '' | In diesem Beispiel ist '' | ||
| + | |||
| + | ===== 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 " | ||
| + | |||
| + | {{url> | ||
| + | |||
| + | Voraussetzung dafür ist das Speichermodell aus [[modul: | ||
| ==== Verwendung von Decorators ==== | ==== Verwendung von Decorators ==== | ||
| Zeile 74: | Zeile 107: | ||
| return factorial | return factorial | ||
| </ | </ | ||
| + | |||
| + | <WRAP center round tip 80%> | ||
| + | Nach dem Dekorieren heisst die Funktion intern '' | ||
| + | </ | ||
| ===== Decorators mit eigenen Parametern ===== | ===== Decorators mit eigenen Parametern ===== | ||
| Zeile 123: | Zeile 160: | ||
| ---- | ---- | ||
| - | {{tag> | + | {{tag> |
| [[https:// | [[https:// | ||
| + | |||