چگونه می‌توان دکوراتور تابع بسازم در پایتون ساخت؟

mohsen3 هفته قبل
ارسال شده در
python

فرض کنید که می خواهیم دو تابع دکوراتور make_bold و make_italic را تعریف کرده و به صورت زیر بر روی تابع say اعمال کنیم.

      @make_bold
@make_italic
def say():
   return "Hello"

    

تا با فراخوانی تابع say() مقدار زیر برگردانده شود:

      "<b><i>Hello</i></b>"

    

ساخت دکوراتورهای make_bold و make_italic

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

      from functools import wraps

def makebold(fn):
    @wraps(fn)
    def wrapper(*args, **kwargs):
        return "<b>" + fn(*args, **kwargs) + "</b>"
    return wrapper

def makeitalic(fn):
    @wraps(fn)
    def wrapper(*args, **kwargs):
        return "<i>" + fn(*args, **kwargs) + "</i>"
    return wrapper

    

استفاده از دکوراتورها

اکنون می‌توانیم این دکوراتورها را به تابع say اعمال کنیم:

      @makebold
@makeitalic
def say():
    return "Hello"

    

در این حالت، زمانی که ما تابع say() را فراخوانی کنیم، دکوراتور makeitalic ابتدا فراخوانی می‌شود و سپس دکوراتور makebold. به این ترتیب، متن به شکل <i>Hello</i> تبدیل می‌شود و در نهایت به b><i>Hello</i></b تبدیل می‌شود.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!