Decorators with parameters in Python

Devanther

Top Contributor

Hallo,

kann mir jemand erklären was dieser Code macht. Für mich unglaublich schwer zu verstehen.
Was passiert bei der Ausgabe?
Kann mir jemand erklären SCHRITT FÜR SCHRITT erklären was der Code macht?

Was macht das?
@functools.wraps(func)

Ich weiss gar nicht wo ich anfangen soll, diesen Code zu verstehen!
Kann mir jemand schrittweise durch den Code helfen, es sind paar Zeilen Code aber trotzdem sehr schwer.
 
Code bitte hier in Codetags einfügen. Die drei Punkte rechts vom Smiley...

Python:
import functools

user = {'username': 'jose123', 'access_level': 'user'}


def user_has_permission(access_level):
    def my_decorator(func):
        @functools.wraps(func)
        def secure_func(panel):
            if user.get('access_level') == access_level:
                return func(panel)
        return secure_func
    return my_decorator


@user_has_permission('user')
def my_function(panel):
    """
    Allows us to retrieve the password for the admin panel.
    """
    return f'Password for {panel} panel is 1234.'


print(my_function.__name__)
print(my_function('movies'))
 
Evtl. willst Du Dir das einmal ansehen: https://realpython.com/primer-on-python-decorators/

Durch den Decorator wird die Funktion nur aufgerufen, denn user.get('access_level') == access_level.
Der Decorator hat den access_level als Parameter bekommen ('user').
Der Aufruf erfolgt mit dem func(...).

Aber das ist bei dem Link alles im Detail erläutert mit Beispielen. Die einfach einmal in Ruhe alles durchgehen um das zu verstehen.
 

Neue Themen


Zurück
Oben