Decorators
What are the key trade-offs of Decorators? When would you choose it vs alternatives?
Answers use simple, clear English.
Quick interview answer
Pros: DRY cross-cutting logic; composable with stacking decorators. Cons: Stack order matters; debugging wrapped call stacks is harder.
Detailed answer
Pros: DRY cross-cutting logic; composable with stacking decorators. Cons: Stack order matters; debugging wrapped call stacks is harder. Decision: pick when benefits outweigh operational cost. Core: Decorators wrap functions: @decorator applies decorator(func). functools.wraps preserves __name__/__doc__. Common for logging, auth, caching, retries. Real-time example: Flask @app.route('/users') registers URL rule; @login_required guards view functions. Pros: DRY cross-cutting logic; composable with stacking decorators. Cons: Stack order matters; debugging wrapped call stacks is harder. Common mistakes: Forgetting @wraps; decorator not returning wrapper function. Best practices: Use wraps; accept *args/**kwargs in generic decorators; prefer parameterized factory pattern. Audience level: Fresher.
Full explanation
Decorators wrap functions: @decorator applies decorator(func). functools.wraps preserves __name__/__doc__. Common for logging, auth, caching, retries.
Real example & use case
Flask @app.route('/users') registers URL rule; @login_required guards view functions.
Pros & cons
Pros: DRY cross-cutting logic; composable with stacking decorators. Cons: Stack order matters; debugging wrapped call stacks is harder.
Common mistakes
Forgetting @wraps; decorator not returning wrapper function.
Best practices
Use wraps; accept *args/**kwargs in generic decorators; prefer parameterized factory pattern.
Follow-up questions
Open one as its own read / solve / listen card