Skrivning af parameteriserede dekoratører
Stryg for at vise menuen
Når du ønsker, at din dekoratør skal opføre sig forskelligt afhængigt af et input, skal du oprette en parameteriseret dekoratør. I modsætning til almindelige dekoratører, som kun tager funktionen som argument, accepterer parameteriserede dekoratører deres egne argumenter, hvilket gør det muligt at styre deres opførsel dynamisk. Dette er især nyttigt, når du vil genbruge en dekoratør i flere situationer med forskellige konfigurationer.
Strukturen af en parameteriseret dekoratør:
- Ydre funktion accepterer dekoratørens argumenter;
- Mellemste funktion er selve dekoratøren, der tager den funktion, som skal dekoreres;
- Inderste funktion indpakker og styrer udførelsen af den oprindelige funktion.
Denne lagdelte tilgang gør det muligt at videregive argumenter til dekoratøren, som derefter er tilgængelige, når den dekorerede funktion kaldes.
12345678910111213141516171819202122# Outer function: accepts the decorator argument 'times' def repeat(times): # The actual decorator that takes the function to be decorated def decorator(func): # Inner function: wraps and controls the execution of 'func' def wrapper(*args, **kwargs): result = None # Call the original function 'times' times for _ in range(times): result = func(*args, **kwargs) return result # Return the wrapper to replace the original function return wrapper # Return the decorator function return decorator # Apply the repeat decorator @repeat(3) def say_hello(): print("Hello!") say_hello()
1. Hvordan adskiller en parameteriseret dekoratør sig fra en almindelig dekoratør?
2. Hvorfor kunne man ønske at videregive argumenter til en dekoratør?
Var alt klart?
Tak for dine kommentarer!
Sektion 4. Kapitel 3
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Sektion 4. Kapitel 3