Decoradores

Demostração da utilização de decoradores para alteração da funcionalidade de funções em Python.

Decorador que imprime “I got decorated” antes da função decorada

def make_pretty(func):
    def inner():
        print("I got decorated")
        func()
    return inner


@make_pretty
def ordinary():
    print("I am ordinary")
>>> ordinary()
I got decorated
I am ordinary

Utilizar o decorador @make_pretty se traduz em:

def not_ordinary():
    print("I am not ordinary")
>>> not_ordinary = make_pretty(not_ordinary)
>>> not_ordinary()
I got decorated
I am not ordinary

Função decoradora que imprime 30 vezes o caractér ‘*’ antes e depois da execução da função decorada

def star(func):
    def inner(*args, **kwargs):
        print("*" * 30)
        func(*args, **kwargs)
        print("*" * 30)
    return inner

Função decoradora que imprime 30 vezes o caractér ‘%’ antes e depois da execução da função decorada

def percent(func):
    def inner(*args, **kwargs):
        print("%" * 30)
        func(*args, **kwargs)
        print("%" * 30)
    return inner
@star
@percent
def printer(msg):
    print(msg)

A utilização dessa função faz com que a mensagem seja decorada com linhas de ‘*’ e ‘%’ antes e depois da mensagem, como no exemplo:

>>> printer("Hello")
******************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hello
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
******************************