say_hi() class CountCalls: def init (self, func): self.func = func self.calls = 0 self._wrapped = func # optional for wraps-like behavior
add = logger(add) # manual decoration print(add(3, 5)) @logger def multiply(a, b): return a * b say_hi() class CountCalls: def init (self, func): self
say = greet # assign function to variable print(say("Alice")) # Hello, Alice def outer(msg): def inner(): # closure captures 'msg' print(msg) return inner say_hi() class CountCalls: def init (self
# DEEP DIVE: Python Decorators (Intermediate to Advanced) def greet(name): return f"Hello, {name}" 5)) @logger def multiply(a