Decorator

Python SELF DE
Level 14 , Lektion 1
Verfügbar

5.1 Einführung in Decorators

Decorators sind Funktionen, die eine andere Funktion als Argument annehmen und eine neue Funktion zurückgeben, wobei sie das Verhalten der ursprünglichen Funktion ändern oder erweitern. Decorators werden verwendet, um die Lesbarkeit und Wiederverwendbarkeit von Code zu erhöhen.

Decorators ermöglichen es, das Verhalten von Funktionen oder Methoden zu modifizieren, ohne ihren Quellcode zu ändern. Daher werden sie häufig verwendet, um Funktionalität, Logging, Zugriffskontrolle und viele andere Aufgaben hinzuzufügen.

Der Syntax von Decorators in Python beinhaltet die Verwendung des Symbols @ vor dem Namen des Decorators, der vor der Definition der Funktion platziert wird.


@decorator
def my_function():
    pass

Dies ist gleichbedeutend mit dem folgenden Code:


def my_function():
    pass
        
my_function = decorator(my_function)

Überlege dir genau, was hier passiert: Wir deklarieren die Funktion my_function, ersetzen sie dann jedoch durch die Funktion decorator, die unsere Funktion als Parameter erhält. Die Funktion decorator kann unsere Funktion nach Belieben aufrufen.

5.2 Erstellen eines einfachen Decorators

Schauen wir uns einen einfachen Decorator an, der eine Nachricht vor und nach dem Aufruf der Funktion ausgibt.


def my_decorator(func):
    def wrapper():
        print("Vor dem Aufruf der Funktion")
        func()
        print("Nach dem Aufruf der Funktion")

    return wrapper
        
@my_decorator
def say_hello():
    print("Hello!")
        
say_hello()

Erklärung

Decorator (my_decorator): Diese Funktion nimmt die Funktion func als Argument und gibt eine neue Funktion wrapper zurück, die func aufruft und zusätzliches Verhalten vor und nach ihrem Aufruf hinzufügt.

Funktion mit Decorator (say_hello): Die Funktion say_hello ist mit dem Decorator my_decorator umwickelt, was zusätzliches Verhalten beim Aufruf hinzufügt.

Ausgabe:


# Vor dem Aufruf der Funktion
Hello!
# Nach dem Aufruf der Funktion

5.3 Decorators mit Argumenten

Decorators können Argumente annehmen, was eine flexible Anpassung ihres Verhaltens ermöglicht.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Hello, {name}!")
        
say_hello("Alice")

Erklärung

Decorator mit Argumenten (repeat): Diese Funktion nimmt das Argument num_times an und gibt den Decorator decorator_repeat zurück.

Decorator (decorator_repeat): Dieser Decorator nimmt die Funktion func an und gibt eine neue Funktion wrapper zurück, die func num_times Mal aufruft.

Funktion mit Decorator (say_hello): Die Funktion say_hello wird dank des Decorators repeat dreimal aufgerufen.

Ausgabe:


Hello, Alice!
Hello, Alice!
Hello, Alice!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION