Kædning og Stabling af Dekoratorer
Stryg for at vise menuen
Når du arbejder med dekoratorer i Python, har du ofte brug for at anvende mere end én dekorator på en enkelt funktion. Dette kaldes stabling eller kædning af dekoratorer. Du stabler dekoratorer ved at placere flere dekoratorlinjer, én efter én, direkte over funktionsdefinitionen. Rækkefølgen, du stabler dekoratorerne i, er vigtig, da det påvirker, hvordan funktionen bliver pakket ind, og hvordan hver dekorator interagerer med de andre. Dekoratoren tættest på funktionen anvendes først, og hver efterfølgende dekorator pakker resultatet af den forrige ind. Det betyder, at dekoratoren øverst i stakken er den yderste wrapper, mens den tættest på funktionen er den inderste.
Eksemplet nedenfor definerer to dekoratorer, decorator_one og decorator_two, som er stablet over en funktion kaldet greet. Stablingsrækkefølgen bestemmer, hvordan dekoratorerne anvendes.
123456789101112131415161718192021222324252627# Prints messages before and after the function call def decorator_one(func): def wrapper(*args, **kwargs): print("Decorator One: Before") result = func(*args, **kwargs) print("Decorator One: After") return result return wrapper # Also prints messages before and after the function call def decorator_two(func): def wrapper(*args, **kwargs): print("Decorator Two: Before") result = func(*args, **kwargs) print("Decorator Two: After") return result return wrapper # Stacking decorators # decorator_two is applied first (innermost), # then decorator_one wraps the result (outermost) @decorator_one @decorator_two def greet(name): print(f"Hello, {name}!") greet("Alice")
Bemærk, at decorator_two anvendes først på greet, og derefter omslutter decorator_one resultatet. Dette betyder, at den dekorator, der er tættest på funktionen, er den inderste, og den øverste er den yderste. Rækkefølgen af stabling er vigtig, da den påvirker opførslen af din dekorerede funktion.
Tak for dine kommentarer!
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