class tracer:
    def __init__(self, func):         # W momencie dekoracji @: zapisanie oryginalnej funkcji
        self.calls = 0
        self.func = func
    def __call__(self, *args):        # W momencie późniejszego wywołania: wykonanie oryginalnej funkcji
        self.calls += 1
        print(f'wywołanie {self.calls} to {self.func.__name__}')
        self.func(*args)

@tracer
def hack(a, b, c):           # hack = tracer(hack)
    print(a + b + c)         # Opakowuje hack w obiekt dekoratora

