Wie erstellt man einen Dekorateur in Python?

Wie man einen Dekorateur in Python erstellt

Ein Dekorateur ist in Python ein mächtiges Werkzeug, das es Ihnen erlaubt, die Funktionalität einer Funktion oder Methode zu erweitern, ohne sie direkt zu ändern. Das Erstellen eines Dekorateurs erfordert den Einsatz höherer Ordnung Funktionen, d.h. Funktionen, die andere Funktionen als Argument nehmen oder als Ergebnis liefern.

Die richtige Vorgehensweise zum Erstellen eines Dekorateurs in Python ist, eine Funktion zu definieren, die eine andere Funktion als Argument nimmt. Der Dekorateur kann dann die Arbeit der übergebenen Funktion erweitern, bevor oder nachdem diese aufgerufen wird.

Schauen wir uns ein einfaches Beispiel an:

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

def say_hello():
    print("Hello!")

say_hello = my_decorator(say_hello)

In diesem Fall haben wir eine Funktion namens my_decorator, die eine andere Funktion func als Argument nimmt. Innerhalb dieser Funktion definieren wir eine verschachtelte Funktion wrapper, die die ursprüngliche Funktion func um zusätzliche Funktionalitäten erweitert. Der my_decorator gibt dann die wrapper Funktion zurück, die nun die erweiterte Version der ursprünglichen Funktion ist.

Wird nun say_hello aufgerufen, gibt sie nicht mehr nur "Hello!" aus, sondern führt die zusätzlichen Anweisungen aus, die im Dekorateur definiert wurden.

Es ist wichtig zu beachten, dass die @-Dekorator-Syntax zwar häufig verwendet wird, um einen Dekorator auf eine Funktion anzuwenden, sie jedoch nicht dazu dient, einen Dekorator zu erstellen. Auch der Import des Moduls 'decorator' ist nicht notwendig, um einen Dekorateur zu erstellen, und Python unterstützt Dekorateure vollständig - sie sind ein integraler Bestandteil der Sprache.

Ein guter Praxis-Tipp beim Arbeiten mit Dekorateuren in Python ist, immer das functools.wraps Dekorator in Ihre Dekoratorfunktionen zu integrieren. Dies hilft dabei, die Metadaten der ursprünglichen Funktion beizubehalten, die sonst beim Dekorieren verloren gehen könnten.

Finden Sie das nützlich?