def __call__(self, *args, **kwargs): self.calls += 1 print(f"Call {self.calls} of {self.func.__name__}") return self.func(*args, **kwargs) @CountCalls def square(x): return x * x
def add(a, b): return a + b
@debug def power(base, exp=2): """Raise base to exponent""" return base ** exp def __call__(self, *args, **kwargs): self
# DEEP DIVE: Python Decorators (Intermediate to Advanced) def greet(name): return f"Hello, {name}" def __call__(self, *args, **kwargs): self
def __call__(self, *args, **kwargs): self.calls += 1 print(f"Call {self.calls} of {self.func.__name__}") return self.func(*args, **kwargs) @CountCalls def square(x): return x * x
def add(a, b): return a + b
@debug def power(base, exp=2): """Raise base to exponent""" return base ** exp
# DEEP DIVE: Python Decorators (Intermediate to Advanced) def greet(name): return f"Hello, {name}"