دکوریتورها در پایتون یکی از ابزارهای پیشرفته برای مدیریت رفتار توابع و کلاسها هستند. آنها به شما اجازه میدهند تا بدون تغییر در بدنهٔ تابع، عملکرد آن را تغییر دهید یا گسترش دهید. این قابلیت باعث میشود کد شما تمیزتر، قابلنگهداریتر و قابلاستفاده مجدد باشد.
یک دکوریتور تابعی است که تابع دیگری را بهعنوان ورودی دریافت کرده و نسخهای جدید از آن را بازمیگرداند:
def my_decorator(func):
def wrapper():
print("Before function runs")
func()
print("After function runs")
return wrapperبرای اعمال دکوریتور روی یک تابع، از علامت @ استفاده میکنیم:
@my_decorator
def say_hello():
print("Hello!")say_hello()خروجی:
Before function runs
Hello!
After function runsبرای پشتیبانی از توابعی که آرگومان دارند، باید از *args و **kwargs استفاده کنیم:
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with {args} and {kwargs}")
return func(*args, **kwargs)
return wrapperپایتون چند دکوریتور توکار دارد که بسیار کاربردیاند:
@staticmethod برای تعریف متد ایستا@classmethod برای متدهایی که به کلاس دسترسی دارند@property برای تبدیل متد به ویژگی قابلدسترسیمیتوان چند دکوریتور را روی یک تابع اعمال کرد:
@auth_check
@log_decorator
def process_data():
passدر این حالت، ابتدا log_decorator اجرا میشود و سپس auth_check.
دکوریتورها در پایتون ابزاری قدرتمند برای تزئین و کنترل رفتار توابع هستند. با استفاده از آنها میتوان منطقهای مشترک را بهصورت تمیز و قابلتکرار پیادهسازی کرد. یادگیری دکوریتورها، گامی مهم در مسیر حرفهای شدن در پایتون است.