Encadeamento e Empilhamento de Decoradores
Deslize para mostrar o menu
Ao trabalhar com decorators em Python, muitas vezes é necessário aplicar mais de um decorator a uma única função. Isso é conhecido como empilhamento ou encadeamento de decorators. O empilhamento de decorators é feito colocando várias linhas de decorator, uma após a outra, diretamente acima da definição da função. A ordem em que os decorators são empilhados é importante, pois afeta como a função é envolvida e como cada decorator interage com os demais. O decorator mais próximo da função é aplicado primeiro, e cada decorator subsequente envolve o resultado do anterior. Isso significa que o decorator no topo da pilha é o invólucro mais externo, enquanto o mais próximo da função é o mais interno.
O exemplo abaixo define dois decorators, decorator_one e decorator_two, empilhados acima de uma função chamada greet. A ordem de empilhamento determina como os decorators são aplicados.
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")
Observe que decorator_two é aplicado primeiro a greet, e então decorator_one envolve o resultado. Isso significa que o decorador mais próximo da função é o mais interno, e o mais acima é o mais externo. A ordem de empilhamento é importante, pois afeta o comportamento da função decorada.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo