decorator در پایتون

معرفی decorator در پایتون

decorator باعث می‌شود که یک تابع تزئین شود. تصور کنید یک تابع داریم و می‌خواهیم به یک تابع جدیدی تبدیلش کنیم. در واقع همان تابع است با یک سری تغییرات جدید به طوری که همان کارهای قبلی را انجام دهد. همچنین وجود دکوریتور باعث می‌شود که کارهای جدید دیگری نیز انجام دهد.

 معرفی دکوریتور در پایتون

 

برای این منظور دو راه وجود دارد:

۱-یک سری کد اضافی به برنامه اضافه کنیم.

۲-یک تابع جدید بنویسیم که شامل تابع قبلی باشد. به این روش decorator می‌گویند و نماد @ به این موضوع اختصاص داده شده است.

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

مقدمه‌ایی بر decorator

در قسمت مقدمه‌ایی بر decorator کد زیر را بررسی می‌کنیم. در کد زیر یک تابع به نام func داریم که عدد ۱ را return می‌کند. یک تابع دیگری داریم به نام hello که Hello را return می‌کند. اگر تابع hello را برابر با یک متغیر به نام greet قرار دهیم، سپس تابع hello را با تابع del پاک کنیم و دوباره تابع hello را فراخوانی کنیم، میبینیم که تابع hello وجود ندارد. ولی اگر greet را فراخوانی کنیم، همچنان این تابع موجود می‌باشد.

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

 

در این بخش برای پیش‌زمینه در مورد  decorator کد زیر را بررسی می‌کنیم. اگر در کد زیر یک تابع به نام hello ایجاد کنیم و این بار در داخل این تابع دو تابع دیگر به نام greet و welcome بنویسیم. می‌بینیم که چون تابع greet و welcome در داخل تابع hello فراخوانی شده‌‌اند. در هنگام فراخوانی تابع hello این دو تابع نیز اجرا می‌شوند. اگر پس از آن بخواهیم تابع greet و یا  welcomeرا خارج از محیط تابع hello فراخوانی کنیم، با خطا مواجه می‌شویم.

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

 

اگر در کد زیر یک تابع به نام hello ایجاد کنیم و باز هم در داخل این تابع دو تابع دیگر به نام greet و welcome بنویسیم. می‌بینیم که چون تابع greet و welcome در داخل تابع hello فراخوانی نشده‌‌اند. و فقط return شده‌اند در هنگام فراخوانی تابع hello این دو تابع نیز اجرا نمی‌شوند. اما اگر تابع hello را برابر یک متغیر قرار دهیم و آن متغیر را به همرا پرانتز print بگیریم. می‌بینیم که این دو تابع نیز اجرا می‌شوند.

تعریف دکوریتور در پایتون

 

در کد زیر در تابع cool به دلیل اینکه تابع super_cool داخل این تابع فراخوانی نشده است و فقط return شده است باید تابع cool را برابر یک متغیر قرار داد و متغیر را به همراه پرانتز فراخوانی کرد.

نحوه ایجاد دکوریتور

 

در کد زیر یک تابع را به عنوان ورودی یک تابع other قرار داده‌ایم. سپس ورودی را که یک تابع است در خود تابع other فراخوانی کنیم. می‌بینیم که اگر تابع other را فراخوانی کنیم تابعی را که به عنوان ورودی داده بودیم نیز فراخوانی می‌شود.

decorator و نحوه ایجاد آن

نحوه ایجاد decorator

برای ایجاد decorator دو روش وجود دارد. یک روش به این صورت می‌باشد که تابع دکوریتور را ایجاد می‌کنیم و تابعی را که می‌خواهیم به وسیله تابع decorator دکور شود را به عنوان ورودی به تابع دکوریتور می‌دهیم. در این کد تابع new_decorator تابع decorator می‌باشد و تابع ورودی که قرار است دکور شود تابع function_need_decorator می‌باشد.

روش های کاربرد دکوریتور

 

همچنین در مبحث دکوریتور، می‌توان بجای تابع function_need_decorator تابع دیگری مانند hello را به وسیله تابع new_decorator دکور کنیم.

چگونگی استفاده از تابع دکوریتور

 

در روش دوم نام تابع decorator را به همراه @ بالای تابعی که قرار است دکور شود می‌نویسیم.

کاربرد decorator در تابع

 

برای آشنایی بیشتر با مبحث decorator و نحوه کار با آن‌ها می‌توانید به دوره جامع آموزش زبان برنامه‌نویسی پایتون  آکادمی رسا مراجعه کنید.

0/5 (0 Reviews)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست