Skip to main content
idego
Python

Klassbaserade dekoratorer – gör din Python-kod stilfull

Av Idego Group

Klassbaserade dekoratorer – gör din Python-kod stilfull

En dekorator är i grunden en funktion som tar emot en annan funktion och utför ytterligare logik för att utöka eller modifiera den ursprungliga funktionens beteende. Att förstå dekoratorer kräver kännedom om first-class-funktioner och closures.

När en funktion tar emot en annan funktion och kan utföra viss logik före eller efter den uppstår dekoreratormönstret. Syntaxen @decorator_function är bara en förkortning för original_function = decorator_function(original_function).

Klassbaserade dekoratorer består av två dunder-metoder: __init__() för dekoratörinstansiering och parameterhantering, och __call__() för körning när det dekorerade objektet anropas. Klassbaserade dekoratorer erbjuder förbättrad läsbarhet och bättre separation mellan dekoratordefinition och omslagningslogik jämfört med funktionsbaserade alternativ.

Fördelarna med dekoratorer stämmer överens med principen Don't Repeat Yourself. När de väl skapats är dekoratorer bakåtkompatibla och kräver inga ändringar i den körande koden — en betydande fördel när flera metoder uppdateras samtidigt.

Ett praktiskt exempel visar @LogException-dekoratorn, som hanterar undantag genom att logga dem till filer. Denna dekorator tar emot parametrar som filnamn, filläge och en valfri tidsstämpelflagga, och visar hur parametriserade dekoratorer kan anpassas för olika scenarier. Dekoratorn omsluter elegant parsningsmetoder utan att ändra deras implementering och möjliggör återanvändning av kod i många funktioner.

Relaterade artiklar