Arsham Roshannejad
Arsham Roshannejad
خواندن ۳ دقیقه·۲ سال پیش

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

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

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

مزیت دیگر این است که دکوریتورها به شما این امکان را می‌دهند که کد ها را از هم جدا کنید و ویژگی‌ها یا رفتارها را به صورت تدریجی بدون تغییر کد تابع اصلی اضافه کنید. این می‌تواند کد شما را انعطاف‌پذیرتر، قابل نگهداری و سازگارتر با تغییرات در طول زمان کند.

در سایر زبان های برنامه نویسی مانند جاوا یا سی شارپ، تابع های مشابه را می توان به ترتیب با استفاده از "annotations" یا "attributes" به دست آورد.


چرا استفاده از دکوراتورها در پایتون خوب است؟

  • کد ساده تر: با استفاده از دکوریتور می توانید از تکرار کد در مکان های مختلف جلوگیری کنید.
  • توسعه‌پذیرتر: دکوریتور ها به شما امکان می‌دهد تا ویژگی‌هایی را به یک تابع موجود اضافه کنید، مانند افزودن حافظه پنهان، ورود به سیستم، یا محدود کردن، بدون تغییر اساسی تابع اصلی.
  • قابلیت استفاده مجدد کد: اغلب، چندین تابع ممکن است نیاز به منطق مشابه داشته باشند تا قبل یا بعد از اجرای کد تابع واقعی اجرا شوند. یک دکوریتور می‌تواند این منطق کلی را با قرار دادن در تابع اصلی ارائه دهد.
  • احراز هویت/مجوز: می‌توان از دکوریتورها برای تأیید سطوح مجوز کاربر قبل از اجازه دسترسی به بخش‌های محدود شده از برنامه استفاده کرد.
  • بهینه سازی عملکرد: از دکوراتورها می توان برای ذخیره نتایج یک تابع در حافظه استفاده کرد.
  • دیباگ کردن: لاگ ها، چاپ لاگ ها و سایر بررسی های رسیدگی به خطا را می توان به دکوریتور اضافه کرد.

سینتکس

در این سینتکس، دکوریتور یک شی قابل فراخوان است که تابعی را به عنوان ورودی می گیرد و یک تابع جدید را به عنوان خروجی برمی گرداند. عملکرد جدید به دلیل رفتار اضافه شده توسط دکوریتور متفاوت از عملکرد اصلی است.

سه مثال از استفاده از دکوراتورها

  1. مثال ساده دکوریتور، که برخی از عملکردها را به یک تابع اضافه می کند:

خروجی:

۲. مثال دکوراتور همراه با آرگومان:

خروجی:

۳. مثال دکوریتور کلاس:

خروجی:

دکوریتور Property

در پایتون، @property یک دکوریتور built-in است که به شما امکان می دهد متدی را تعریف کنید که به عنوان یک attribute قابل دسترسی باشد و دسترسی و تغییر مقادیر attribute را آسان تر می کند.

مثال:

خروجی:

دکوریتور login_required در جنگو

در مثال بالا، ما از دکوریتور @login_required استفاده می کنیم تا اطمینان حاصل کنیم که فقط کاربران احراز هویت شده می توانند به تابع my_view دسترسی داشته باشند. اگر کاربر سعی کند در حالی که وارد نشده است به این ویو دسترسی پیدا کند، به صفحه لاگین هدایت می شود.

دکوریتور @login_required یک دکوریتور داخلی ارائه شده توسط جنگو است که فرآیند احراز هویت کاربران را ساده می کند. بررسی می کند که آیا کاربر احراز هویت شده است یا خیر و در غیر این صورت، آنها را به صفحه لاگین هدایت می کند.

همچنین می توانید دکوریتورهای کاستوم شده خود را در جنگو ایجاد کنید تا عملکردهای اضافی اضافه کنید یا رفتار ویو ها را بر اساس شرایط خاص تغییر دهید.

احراز هویتpythondecoratorپایتوندکوریتور
سافتویر اینجینیر
شاید از این پست‌ها خوشتان بیاید