برنامه نویسی

دکوراتور پایتون چیست؟

📌 دکوراتور پایتون چیست؟

بوها دکوراتور پایتون تابعی است که عملکرد یا کلاس دیگری را تغییر می دهد بدون تغییر کد اصلی آنبشر

مقاله کامل را در این مورد بخوانید

این قابلیت های اضافی (به عنوان مثال ، ورود به سیستم ، احراز هویت ، ذخیره سازی) را به توابع یا روش ها اضافه می کند.

استفاده می کند @decorator_name نحو برای بسته بندی یک تابع.


✅ نمونه اصلی دکوراتور پایتون

📌 بدون دکوراتور (روش دستی):

def uppercase_decorator(func):
    def wrapper():
        result = func()
        return result.upper()
    return wrapper

def say_hello():
    return "hello world"

# Manually applying decorator
say_hello = uppercase_decorator(say_hello)

print(say_hello())  # Output: "HELLO WORLD"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مشکل: ما باید به صورت دستی بسته بندی کنیم say_hello درون uppercase_decoratorبشر


📌 با دکوراتور (روش تمیز کننده):

def uppercase_decorator(func):
    def wrapper():
        result = func()
        return result.upper()
    return wrapper

@uppercase_decorator  # ✅ This automatically applies the decorator
def say_hello():
    return "hello world"

print(say_hello())  # Output: "HELLO WORLD"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا این بهتر است؟

  • بسته بندی دستی کمتربشر
  • خواندن و نگهداری آسان تربشر

✅ نحوه کار دکوراسیون ها (گام به گام)

@uppercase_decorator
def say_hello():
    return "hello world"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

1⃣ پایتون می بیند @uppercase_decorator و آن را در say_helloبشر

2 uppercase_decorator(say_hello) به طور خودکار نامیده می شودبشر

3⃣ بازگشت wrapper() عملکردی که اصلاح کردن say_hello() خروجیبشر

4⃣ say_hello() اکنون برمی گردد "HELLO WORLD" به جای "hello world"بشر


✅ نمونه های دکوراسیون در دنیای واقعی

🔹 مثال 1: دکوراتور ورود به سیستم

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__} with {args} {kwargs}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} returned {result}")
        return result
    return wrapper

@log_decorator
def add(a, b):
    return a + b

add(5, 3)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

💡 خروجی:

Calling add with (5, 3) {}
add returned 8
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا از این استفاده می کنیم؟

  • به طور خودکار تماس ها و نتایج عملکرد را ثبت می کند بدون اصلاح خود عملکردبشر

🔹 مثال 2: دکوراتور احراز هویت در Fastapi

from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

def auth_required(func):
    def wrapper(username: str):
        if username != "admin":
            raise HTTPException(status_code=403, detail="Unauthorized")
        return func(username)
    return wrapper

@app.get("/secure-data")
@auth_required  # ✅ Protects this route
def secure_data(username: str):
    return {"message": "Secure data accessed!"}

# Now only "admin" can access this route
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا از این استفاده می کنیم؟

  • فقط کاربران معتبر را تضمین می کند می تواند به برخی از مسیرهای API دسترسی پیدا کند.

🔹 مثال 3: دکوراتور اجرای زمان

import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f"{func.__name__} took {end_time - start_time:.4f} seconds")
        return result
    return wrapper

@time_it
def slow_function():
    time.sleep(2)
    return "Finished"

slow_function()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

💡 خروجی:

slow_function took 2.0001 seconds
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا از این استفاده می کنیم؟

  • زمان اجرای یک عملکرد را اندازه گیری می کند (برای بهینه سازی عملکرد مفید است).

✅ خلاصه: چرا از دکوراتورهای پایتون استفاده می کنید؟

نشان چرا مفید است؟
قابلیت استفاده مجدد کد بدون تغییر کد عملکرد ، رفتار اضافی اضافه کنید.
خوانایی @decorator_name روشن می کند که عملکرد اصلاح شده است.
انعطاف پذیری قابل استفاده است چندین عملکرد به راحتیبشر
در چارچوب ها استفاده می شود Fastapi ، Django ، Flask ، Tensorflow همه از دکوراتورها استفاده می کنند.

نوشته های مشابه

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

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

دکمه بازگشت به بالا