Skip to content

Latest commit

 

History

History
62 lines (40 loc) · 1.26 KB

20240508134342.md

File metadata and controls

62 lines (40 loc) · 1.26 KB

writing decorators function- vs class-based

It turns out that you can also write decorators using classes! 💡

Check out the basic comparison below:

• Function-based: keeps it simple. 🛠️ • Class-based: scalable for more complex needs (e.g. state management, flexibility, reusability and additional functionality). 📈

import time

# function-based


def timeit(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(
            f"Function {func.__name__} took {end_time - start_time:.4f} seconds to execute"
        )
        return result

    return wrapper


@timeit
def test_function(x):
    return sum([i * x for i in range(10000)])


test_function(2)


# class-based


class TimeItClass:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        start_time = time.time()
        result = self.func(*args, **kwargs)
        end_time = time.time()
        print(
            f"Function {self.func.__name__} took {end_time - start_time:.4f} seconds to execute"
        )
        return result


@TimeItClass
def test_function2(x):
    return sum([i * x for i in range(10000)])


test_function2(2)

#decorators