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ể.
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()
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.
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ệ.