~2 دقیقه مطالعه • بروزرسانی ۲۵ شهریور ۱۴۰۴
مقدمه
دکوریتورها در پایتون یکی از ابزارهای پیشرفته برای مدیریت رفتار توابع و کلاسها هستند. آنها به شما اجازه میدهند تا بدون تغییر در بدنهٔ تابع، عملکرد آن را تغییر دهید یا گسترش دهید. این قابلیت باعث میشود کد شما تمیزتر، قابلنگهداریتر و قابلاستفاده مجدد باشد.
ساختار پایه دکوریتور
یک دکوریتور تابعی است که تابع دیگری را بهعنوان ورودی دریافت کرده و نسخهای جدید از آن را بازمیگرداند:
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برای تبدیل متد به ویژگی قابلدسترسی
دکوریتورهای تو در تو (Nested Decorators)
میتوان چند دکوریتور را روی یک تابع اعمال کرد:
@auth_check
@log_decorator
def process_data():
passدر این حالت، ابتدا log_decorator اجرا میشود و سپس auth_check.
جمعبندی
دکوریتورها در پایتون ابزاری قدرتمند برای تزئین و کنترل رفتار توابع هستند. با استفاده از آنها میتوان منطقهای مشترک را بهصورت تمیز و قابلتکرار پیادهسازی کرد. یادگیری دکوریتورها، گامی مهم در مسیر حرفهای شدن در پایتون است.
نوشته و پژوهش شده توسط دکتر شاهین صیامی