برنامه نویسی

Python Decorators: Simplifying Code – DEV Community

Summarize this content to 400 words in Persian Lang
دکوراتورها در پایتون ابزار قدرتمندی هستند که به شما امکان می‌دهند رفتار توابع یا روش‌ها را بدون تغییر کد منبع آن‌ها تغییر دهید. آنها روشی تمیز برای افزودن عملکرد ارائه می دهند و به طور گسترده برای ورود به سیستم، اجرای قوانین و بهینه سازی عملکرد استفاده می شوند.

در این پست، شش دکوراتور رایج پایتون را با مثال‌های ساده بررسی می‌کنیم.

1 – @staticmethod: تعریف روش های استاتیک

دکوراتور @staticmethod متدهایی ایجاد می کند که به داده های نمونه (self) یا کلاس (cls) دسترسی ندارند. مانند یک تابع معمولی عمل می کند اما می تواند از کلاس یا یک نمونه فراخوانی شود.

مثال:

class MyClass:
@staticmethod
def greet():
return “Hello from static method!”

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

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

2 – @classmethod: متدهای کلاس را تعریف کنید

دکوراتور @classmethod به شما امکان می دهد متدهایی را تعریف کنید که کلاس (cls) را به عنوان اولین آرگومان می گیرند. این برای روش های کارخانه یا تغییر وضعیت کلاس مفید است.

مثال:

class MyClass:
count = 0

@classmethod
def increment_count(cls):
cls.count += 1

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

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

3 – @property: ویژگی های فقط خواندنی را تعریف کنید

دکوراتور @property اجازه می دهد تا به روش ها مانند ویژگی ها دسترسی داشته باشید. زمانی مفید است که می‌خواهید دسترسی به یک ویژگی را بدون افشای پیاده‌سازی داخلی کنترل کنید.

مثال:

class Circle:
def __init__(self, radius):
self._radius = radius

@property
def area(self):
return 3.14 * self._radius ** 2

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

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

4 – @functools.lru_cache: نتایج عملکرد گران قیمت حافظه پنهان

دکوراتور @lru_cache (از functools) نتایج فراخوانی تابع را در حافظه پنهان ذخیره می کند تا از محاسبه مجدد جلوگیری شود. این می تواند به طور قابل توجهی عملکرد عملکردهای گران قیمت یا اغلب نامیده می شود را بهبود بخشد.

مثال:

from functools import lru_cache

@lru_cache(maxsize=32)
def expensive_computation(x):
return x ** 2

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

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

5 – @functools.wraps: حفظ متادیتا در دکوراتورهای سفارشی

هنگام نوشتن دکوراتورهای سفارشی، دکوراتور @wraps ابرداده (نام، رشته سند) تابع اصلی را حفظ می‌کند و اطمینان می‌دهد که ابزارهای درون نگری همچنان کار می‌کنند.

مثال:

from functools import wraps

def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper

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

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

6 – @dataclass: ساده کردن تعاریف کلاس

دکوراتور @dataclass (از ماژول dataclasses) به طور خودکار روش هایی مانند تولید می کند init() و نماینده() برای کلاس ها. برای کلاس های نگهداری داده مناسب است.

مثال:

from dataclasses import dataclass

@dataclass
class Point:
x: int
y: int

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

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

نتیجه گیری

دکوراتورهای پایتون مانند @staticmethod، @classmethod، @property، @lru_cache، @wraps، و @dataclass به نوشتن کدهای پاک‌تر و کارآمدتر با قرار دادن قابلیت‌ها در اطراف متدها و توابع کمک می‌کنند. آنها ابزارهای همه کاره ای هستند که می توانند بسیاری از کارهای برنامه نویسی را ساده کنند.

منابع

تعریف دکوراتور پایتون@staticmethod@classmethod@property@functools.lru_cache@functools.wraps@dataclass

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

در این پست، شش دکوراتور رایج پایتون را با مثال‌های ساده بررسی می‌کنیم.

1 – @staticmethod: تعریف روش های استاتیک

دکوراتور @staticmethod متدهایی ایجاد می کند که به داده های نمونه (self) یا کلاس (cls) دسترسی ندارند. مانند یک تابع معمولی عمل می کند اما می تواند از کلاس یا یک نمونه فراخوانی شود.

مثال:

class MyClass:
    @staticmethod
    def greet():
        return "Hello from static method!"

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

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

2 – @classmethod: متدهای کلاس را تعریف کنید

دکوراتور @classmethod به شما امکان می دهد متدهایی را تعریف کنید که کلاس (cls) را به عنوان اولین آرگومان می گیرند. این برای روش های کارخانه یا تغییر وضعیت کلاس مفید است.

مثال:

class MyClass:
    count = 0

    @classmethod
    def increment_count(cls):
        cls.count += 1
وارد حالت تمام صفحه شوید

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

3 – @property: ویژگی های فقط خواندنی را تعریف کنید

دکوراتور @property اجازه می دهد تا به روش ها مانند ویژگی ها دسترسی داشته باشید. زمانی مفید است که می‌خواهید دسترسی به یک ویژگی را بدون افشای پیاده‌سازی داخلی کنترل کنید.

مثال:

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14 * self._radius ** 2
وارد حالت تمام صفحه شوید

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

4 – @functools.lru_cache: نتایج عملکرد گران قیمت حافظه پنهان

دکوراتور @lru_cache (از functools) نتایج فراخوانی تابع را در حافظه پنهان ذخیره می کند تا از محاسبه مجدد جلوگیری شود. این می تواند به طور قابل توجهی عملکرد عملکردهای گران قیمت یا اغلب نامیده می شود را بهبود بخشد.

مثال:

from functools import lru_cache

@lru_cache(maxsize=32)
def expensive_computation(x):
    return x ** 2
وارد حالت تمام صفحه شوید

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

5 – @functools.wraps: حفظ متادیتا در دکوراتورهای سفارشی

هنگام نوشتن دکوراتورهای سفارشی، دکوراتور @wraps ابرداده (نام، رشته سند) تابع اصلی را حفظ می‌کند و اطمینان می‌دهد که ابزارهای درون نگری همچنان کار می‌کنند.

مثال:

from functools import wraps

def my_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper
وارد حالت تمام صفحه شوید

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

6 – @dataclass: ساده کردن تعاریف کلاس

دکوراتور @dataclass (از ماژول dataclasses) به طور خودکار روش هایی مانند تولید می کند init() و نماینده() برای کلاس ها. برای کلاس های نگهداری داده مناسب است.

مثال:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int
وارد حالت تمام صفحه شوید

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

نتیجه گیری

دکوراتورهای پایتون مانند @staticmethod، @classmethod، @property، @lru_cache، @wraps، و @dataclass به نوشتن کدهای پاک‌تر و کارآمدتر با قرار دادن قابلیت‌ها در اطراف متدها و توابع کمک می‌کنند. آنها ابزارهای همه کاره ای هستند که می توانند بسیاری از کارهای برنامه نویسی را ساده کنند.

منابع

تعریف دکوراتور پایتون
@staticmethod
@classmethod
@property
@functools.lru_cache
@functools.wraps
@dataclass

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

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

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

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