Python Decorator Tutorial: Verwenden von Decorators in Python



Dieser Artikel behandelt das Konzept des Dekorateurs in Python mit einem detaillierten Tutorial, das verschiedene Beispiele aus dem wirklichen Leben wie ausgefallene Dekorateure usw. enthält.

Funktionen in Python ermöglichen die optimierte Implementierung der Ausführungslogik eines beliebigen Programms, mehrfach mit problemloser Ausführung. Dekorateure in Python drehen sich auch um das Konzept von In diesem Artikel werden wir die Dekorateure im Detail, einschließlich verschiedener Beispiele in diesem Python-Dekorateur-Tutorial. Die folgenden Themen werden in diesem Blog behandelt.

Was ist eine Marker-Schnittstelle in Java

Was sind Funktionen in Python?

Dekorateure in Python sind ein fortgeschrittenes Thema. Bevor Sie fortfahren, stellen Sie sicher, dass Sie mit dem Konzept der Python-Funktionen gründlich vertraut sind. Es gibt einige Voraussetzungen, die man verstehen muss, bevor man zu Dekorateuren in Python übergeht.





  • Erste Klasse Objekte

  • Innere Funktionen



Erstklassige Objekte

In Python wird alles als Objekt behandelt, einschließlich aller Datentypen , Funktionen zu. Daher wird eine Funktion auch als erstklassiges Objekt bezeichnet und kann als Argument weitergegeben werden.

Schauen wir uns ein Beispiel an, um zu verstehen, wie es funktioniert.

def func1 (name): return f'Hello {name} 'def func2 (name): return f' {name}, Wie geht es dir? ' def func3 (func4): return func4 ('Lieber Lernender') print (func3 (func1)) print (func3 (func2))
 Ausgabe: Hallo Lieber Lernender Lieber Lernender, wie geht es dir?

Im obigen Beispiel haben wir die verwendet um den Namen zu erhalten und func1 und func2 als Argument in func3 zu übergeben.



Innere Funktionen

In Python ist es möglich, Funktionen innerhalb einer Funktion zu definieren. Diese Funktion wird als innere Funktion bezeichnet. Hier ist ein Beispiel, um zu zeigen, wie wir innere Funktionen in Python verwenden können.

def func (): print ('erste Funktion') def func1 (): print ('erste untergeordnete Funktion') def func2 (): print ('zweite untergeordnete Funktion') func1 () func2 () func ()
 Ausgabe: erste Funktion erste untergeordnete Funktion zweite untergeordnete Funktion

Im obigen Programm spielt es keine Rolle, wie die untergeordneten Funktionen deklariert werden. Die Ausgabe hängt davon ab, wie die untergeordneten Funktionen ausgeführt werden. Sie sind lokal mit func () verknüpft, sodass sie nicht separat aufgerufen werden können.

Wenn Sie sie separat aufrufen, wird eine Fehlermeldung angezeigt, da sie als gespeichert sind Variablen innerhalb der func () und kann nur aufgerufen werden, wenn func () aufgerufen wird.

Rückgabe einer Funktion von einer Funktion

Es ist möglich, eine Funktion mit einer anderen Funktion zurückzugeben. Schauen Sie sich das folgende Beispiel an, um dies zu verstehen.

def func (n): def func1 (): 'edureka' zurückgeben def func2 (): 'python' zurückgeben, wenn n == 1: func1 zurückgeben else: func2 zurückgeben a = func (1) b = func (2) print ( a ()) drucken (b ())
 Ausgabe: Edureka Python

Dekorateure in Python

Dekoratoren in Python sind sehr leistungsfähig, die das Verhalten einer Funktion ändern, ohne sie dauerhaft zu ändern. Grundsätzlich wird eine andere Funktion umschlossen, und da beide Funktionen aufrufbar sind, wird eine aufrufbare zurückgegeben.

Im Nachhinein verpackt ein Dekorateur eine Funktion und ändert ihr Verhalten. Schauen wir uns ein einfaches Beispiel an, um zu verstehen, wie wir mit Dekorateuren in Python arbeiten können.

def function1 (function): def wrapper (): print ('hallo') function () print ('willkommen bei python edureka') return wrapper def function2 (): print ('Pythonista') function2 = function1 (function2) function2 ( )
 Ausgabe: hallo pythonista willkommen bei python edureka

Um den Programmierern die Arbeit zu erleichtern, haben wir einen syntaktischen Zucker mit Python-Dekoratoren. Schauen Sie sich ein Beispiel unten an, um zu verstehen, wie es funktioniert.

def function1 (function): def wrapper (): print ('hallo') function () print ('wie geht es dir?') return wrapper @ function1 def function2 (): print ('pythonista') function2 ()
 Ausgabe: Hallo Pythonista, wie geht es dir?

Die Ausgabe ähnelt dem obigen Programm. Der einzige Unterschied besteht darin, dass wir die Tortensyntax mit dem @ -Symbol verwendet haben.

Dekorateure mit Argumenten verwenden

Wenn Sie eine Funktion mit Argumenten haben, wird es für die Decorator-Funktion schwieriger, da sie auch Argumente in der Deklaration benötigt. Um dies zu beheben, können wir die * args und ** kwargs in der inneren Wrapper-Funktion verwenden. Schauen Sie sich das folgende Beispiel an, um dies zu verstehen.

def function1 (function): def wrapper (* args, ** kwargs): print ('hallo') function (* args, ** kwargs) print ('welcome to edureka') return wrapper @ function1 def function2 (name): print (f '{name}') function2 ('pythonista')
 Ausgabe: hallo pythonista willkommen bei edureka

Rückgabe von Werten aus dekorierten Funktionen

Schauen wir uns ein Beispiel an, um zu sehen, wie wir einen Wert von einer dekorierten Funktion zurückgeben können.

def function1 (function): def wrapper (* args, ** kwargs): function (* args, ** kwargs) print ('es hat funktioniert') return wrapper @ function1 def function2 (name): print (f '{name} ') function2 (' python ')
 Ausgabe: Python es hat funktioniert

Stellen Sie sicher, dass Sie Ihre Wrapper-Funktion mit Argumenten zurückgeben, um Fehler zu vermeiden.

Ausgefallene Dekorateure in Python

Nachdem wir nun wissen, wie Dekorateure in Python arbeiten, wollen wir anhand einiger Beispiele einige recht komplexe Funktionen untersuchen.

Klassendekorateure

Es gibt zwei Möglichkeiten, eine Klasse in Python zu dekorieren. Die erste ist, wo Sie die Methoden innerhalb einer Klasse dekorieren können. Es gibt integrierte Dekoratoren wie @classmethod, @staticmethod und @property in Python. @classmethod und @staticmethod definieren Methoden innerhalb einer Klasse, die mit keiner anderen Instanz einer Klasse verbunden ist. @property wird normalerweise verwendet, um die Getter und Setter eines Klassenattributs anzupassen. Schauen wir uns ein Beispiel an, um dies zu verstehen.

class Square: def __init __ (self, side): self._side = side @property def side (self): return self._side @ side.setter def side (self, value): wenn value & gt = 0: self._side = Wert sonst: print ('error') @property def area (self): return self._side ** 2 @classmethod def unit_square (cls): return cls (1) s = Square (5) print (s.side) print (s.area)
 Ausgabe: 5 25

Eine andere Möglichkeit, die Klasse zu dekorieren, besteht darin, die gesamte Klasse zu dekorieren. Nehmen wir ein Beispiel, um dies zu verstehen.

aus Datenklassen importieren Datenklasse @Dataclass-Klasse Karten: Rang: Str Anzug: Str

Das Dekorieren einer Klasse spiegelt ihre Methoden nicht wider. Es ist fast so, als würde man einen Dekorator einer Funktion schreiben. Der einzige Unterschied ist die Klasse im Argument anstelle einer Funktion.

Singleton-Klasse

Eine Singleton-Klasse hat nur eine Instanz. Es gibt viele Singletons in Python, einschließlich True, None usw. Schauen wir uns ein Beispiel an, um dies besser zu verstehen.

import functools def singleton (cls): @ functools.wraps (cls) def wrapper (* args, ** kwargs): wenn nicht wrapper.instance: wrapper.instance = cls (* args, ** kwargs) gibt wrapper.instance wrapper zurück .instance = None return wrapper @singleton class One: pass first = One () second = One () print (first is second)
 Ausgabe: Wahr

Die Verwendung von 'is' gibt nur 'true' für Objekte zurück, die dieselbe Instanz sind. Das obige Beispiel verwendet den gleichen Ansatz wie jeder andere Funktionsdekorateur. Der einzige Unterschied ist, dass wir cls anstelle von function verwendet haben. Auch die erste und die zweite Instanz sind genau dieselbe Instanz.

php mysql_fetch_array

Nesting Dekorateure

Sie können mehrere Dekorateure verwenden, indem Sie sie übereinander stapeln. Nehmen wir ein Beispiel, um zu verstehen, wie dies funktioniert.

@ function1 @ function2 def function (name): print (f '{name}')

Auf diese Weise können wir verschachtelte Dekoratoren verwenden, indem wir sie aufeinander stapeln. Im obigen Beispiel handelt es sich nur um eine Darstellung. Damit dies funktioniert, müssen Sie Funktion1 und Funktion2 mit jeweils Wrapper-Funktionen definieren.

Argumente in einem Dekorateur

Es ist immer nützlich, Argumente in einem Dekorateur zu übergeben. Betrachten wir das folgende Beispiel.

import functools def repeat (num): def decorator_repeat (func): @ functools.wraps (func) def wrapper (* args, ** kwargs): für _ in range (num): value = func (* args, ** kwargs ) Rückgabewert Rückgabewrapper Rückgabe decorator_repeat @repeat (num = 4) def Funktion (Name): Funktion print (f '{Name}') ('Python')
 Ausgabe: Python Python Python Python

Dies bringt uns zum Ende dieses Artikels, wo wir anhand von Beispielen gelernt haben, wie wir Decorator in Python verwenden können. Ich hoffe, Sie sind mit allem klar, was Ihnen in diesem Python Decorator-Tutorial mitgeteilt wurde

Wenn Sie diesen Artikel im 'Python Decorator Tutorial' relevant fanden, lesen Sie die Ein vertrauenswürdiges Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt.

Wir sind hier, um Ihnen bei jedem Schritt auf Ihrer Reise zu helfen und einen Lehrplan zu erstellen, der für Studenten und Fachleute konzipiert ist, die eine sein möchten . Der Kurs soll Ihnen einen Vorsprung in die Python-Programmierung verschaffen und Sie sowohl für Kern- als auch für fortgeschrittene Python-Konzepte sowie für verschiedene Konzepte schulen mögen

Wenn Sie auf Fragen stoßen, können Sie alle Ihre Fragen im Kommentarbereich des „Python Decorator-Tutorials“ stellen. Unser Team beantwortet diese gerne.