Decorator trong Python là một hàm hoặc lớp được sử dụng để thay đổi hoặc mở rộng hành vi của hàm hoặc phương thức khác mà không thay đổi mã nguồn gốc của nó. Decorator được áp dụng bằng cách đặt ký tự @ trước tên của decorator và đặt trên hàm cần được thay đổi. Điều này giúp mã ngắn gọn hơn, dễ đọc và tái sử dụng. Ví dụ phổ biến của decorator là @staticmethod, @classmethod hoặc @property. Decorator cũng có thể được tùy chỉnh theo nhu cầu cụ thể.

  • Thêm logic bổ sung (như ghi log, đo thời gian thực thi)
  • Kiểm soát truy cập
  • Quản lý thuộc tính của đối tượng
def decorator_function(original_function):
    def wrapper_function():
        print(f"Wrapper executed before {original_function.__name__}")
        return original_function()
    return wrapper_function
@decorator_function
def display():
    print("Display function ran")

display()

Cách hoạt động

Decorators hoạt động bằng cách nhận một hàm và trả về một hàm khác, từ đó có thể thay đổi hoặc thêm chức năng mới vào hàm ban đầu.

Ví dụ về thời gian thực thi

import time

def timer_decorator(func):
    def wrapper():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"Executed {func.__name__} in {end_time - start_time} seconds")
    return wrapper

@timer_decorator
def my_function():
    time.sleep(1)
    print("Function executed")

my_function()

Decorator giúp mã nguồn trở nên ngắn gọn, dễ đọc hơn và rất hữu ích trong nhiều trường hợp như tối ưu hóa hiệu suất hoặc xử lý ngoại lệ.