آشنایی کامل با دکوریتورها در پایتون – تزئین رفتار توابع با کدهای قابل‌استفاده مجدد

دکوریتورها در پایتون ابزار قدرتمندی برای تغییر یا گسترش رفتار توابع و کلاس‌ها بدون تغییر در کد اصلی آن‌ها هستند. با استفاده از دکوریتورها می‌توان منطق‌هایی مانند لاگ‌گیری، احراز هویت، کش‌کردن، یا بررسی زمان اجرا را به‌صورت تمیز و قابل‌تکرار پیاده‌سازی کرد. این مقاله به بررسی ساختار، نحوه تعریف، کاربردهای رایج و مثال‌های عملی دکوریتورها می‌پردازد.

پایتوندکوریتورتابعتزئین-رفتار

~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.


جمع‌بندی


دکوریتورها در پایتون ابزاری قدرتمند برای تزئین و کنترل رفتار توابع هستند. با استفاده از آن‌ها می‌توان منطق‌های مشترک را به‌صورت تمیز و قابل‌تکرار پیاده‌سازی کرد. یادگیری دکوریتورها، گامی مهم در مسیر حرفه‌ای شدن در پایتون است.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

آشنایی کامل با کلاس‌ها در پایتون – شی‌گرایی، ساختار، وراثت و کاربردهای عملی

کلاس‌ها در پایتون یکی از پایه‌های برنامه‌نویسی شی‌گرا هستند که امکان تعریف ساختارهای داده‌ای پیچیده، رفتارهای قابل‌تخصیص و کپسوله‌سازی منطق را فراهم می‌کنند. در این مقاله، با مفاهیم پایه‌ای کلاس، سازنده‌ها، متدها، وراثت، کلاس‌های فرزند، و کاربردهای واقعی کلاس‌ها در پروژه‌های پایتونی آشنا می‌شویم.

ادامه

چندین نمونه کد

برای درک بهتر زبان پیاتون

ادامه

راهنمای جامع دریافت ورودی متنی از کاربر در پایتون

در پایتون، دریافت ورودی از کاربر یکی از ابتدایی‌ترین اما کلیدی‌ترین قابلیت‌ها برای تعامل با کاربران است. این مقاله به بررسی دقیق تابع input()، نحوه تبدیل ورودی به انواع داده‌ای، استفاده در شرط‌ها و حلقه‌ها، و نکات امنیتی و عملی درباره فیلتر کردن و اعتبارسنجی ورودی می‌پردازد. همچنین مثال‌های متنوعی برای کاربردهای واقعی ارائه می‌گردد.

ادامه

بررسی کامل تابع در پایتون: ساختار، انواع و کاربردها

comprehensive-guide-python-functiتوابع در پایتون از مهم‌ترین ابزارهای برنامه‌نویسی هستند که کد را ماژولار، قابل استفاده مجدد و خواناتر می‌سازند. این مقاله با معرفی ساختار تعریف تابع، تفاوت بین توابع Built-in و Custom، کاربرد آرگومان‌ها، مقدارهای بازگشتی، و مفاهیم پیشرفته مانند توابع بازگشتی و توابع لامبدا، درک جامعی از توانمندی‌های تابع در پایتون فراهم می‌کند.ons-structure-types-uses-fa

ادامه

حلقه‌ها، ایتریتورها و کنترل جریان تکرار در پایتون

در پایتون، حلقه‌ها ابزاری کلیدی برای انجام عملیات تکراری هستند. حلقه‌های for برای تعداد مشخص و while برای تعداد نامشخص استفاده می‌شوند. با معرفی مفهوم ایتریتور، تابع input برای دریافت داده از کاربر، و توابعی مثل enumerate, zip, next, و shuffle، این مقاله درک جامعی از نحوه مدیریت و کنترل جریان تکرار در پایتون ارائه می‌دهد.

ادامه

ساختارهای شرطی if و if-else در پایتون

در زبان پایتون، ساختارهای شرطی مانند if و if-else ابزارهای اصلی برای کنترل جریان اجرای برنامه هستند. این ساختارها اجازه می‌دهند تا برنامه در صورت برقراری شرط، مسیر خاصی را اجرا کند. مقالهٔ حاضر با معرفی نحوه استفاده از if، if-else، و ترکیب شرط‌ها، کاربردهای آن‌ها را با مثال‌های قابل فهم برای سطح مقدماتی و متوسط توضیح می‌دهد.

ادامه