File: LP6E/Chapter39/decorator1.py

class tracer:
    def __init__(self, func):         # On @ decoration: save original func
        self.calls = 0
        self.func = func
    def __call__(self, *args):        # On later calls: run original func
        self.calls += 1
        print(f'call {self.calls} to {self.func.__name__}')
        self.func(*args)

@tracer
def hack(a, b, c):           # hack = tracer(hack)
    print(a + b + c)         # Wraps hack in a decorator object



[Home page] Books Code Blog Python Author Train Find ©M.Lutz