फंक्शन्स को बेहतर बनाने के लिए पायथन डेकोरेटर्स का उपयोग कैसे करें

पायथन डेकोरेटर फ़ंक्शन और विधियों को संशोधित या बढ़ाने का एक शक्तिशाली और लचीला तरीका है। डेकोरेटर फ़ंक्शन को अतिरिक्त कार्यक्षमता के साथ लपेटने का एक तरीका प्रदान करते हैं, जिससे आप इसके वास्तविक कोड को संशोधित किए बिना इसके व्यवहार को बढ़ा सकते हैं। यह लेख आपको डेकोरेटर की अवधारणा से परिचित कराएगा, उन्हें कैसे बनाएं और उपयोग करें, और कुछ व्यावहारिक उदाहरणों का पता लगाएगा।

डेकोरेटर क्या है?

डेकोरेटर एक ऐसा फ़ंक्शन है जो किसी दूसरे फ़ंक्शन को लेता है और उसे स्पष्ट रूप से संशोधित किए बिना उसके व्यवहार को विस्तारित करता है। पायथन में, डेकोरेटर का उपयोग अक्सर मौजूदा फ़ंक्शन या विधियों में लॉगिंग, एक्सेस कंट्रोल या प्रदर्शन माप जैसी कार्यक्षमता जोड़ने के लिए किया जाता है। डेकोरेटर को @decorator_name सिंटैक्स का उपयोग करके फ़ंक्शन पर लागू किया जाता है।

# Basic example of a decorator
def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

डेकोरेटर कैसे काम करते हैं

जब आप किसी फ़ंक्शन पर डेकोरेटर लागू करते हैं, तो पायथन मूलतः निम्नलिखित चरण निष्पादित करता है:

  1. डेकोरेटर फ़ंक्शन को मूल फ़ंक्शन को तर्क के रूप में लेकर बुलाया जाता है।
  2. डेकोरेटर फ़ंक्शन एक नया फ़ंक्शन परिभाषित करता है (जिसे अक्सर wrapper कहा जाता है) जो मूल फ़ंक्शन के व्यवहार को बढ़ाता या संशोधित करता है।
  3. डेकोरेटर फ़ंक्शन नया फ़ंक्शन लौटाता है.
  4. जब डेकोरेटेड फ़ंक्शन को कॉल किया जाता है, तो यह वास्तव में डेकोरेटर द्वारा लौटाए गए नए फ़ंक्शन को कॉल करता है।

एक सरल डेकोरेटर बनाना

आइए एक सरल डेकोरेटर बनाएं जो किसी फ़ंक्शन के निष्पादन समय को मापता है। यह प्रदर्शन परीक्षण और अनुकूलन के लिए उपयोगी है।

import time

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

@timing_decorator
def slow_function():
    time.sleep(2)
    print("Function finished!")

slow_function()

तर्कों के साथ डेकोरेटर का उपयोग करना

कभी-कभी, आप अपने डेकोरेटर को तर्क देना चाह सकते हैं। इसे प्राप्त करने के लिए, आपको एक डेकोरेटर फैक्ट्री बनाने की आवश्यकता है - एक फ़ंक्शन जो एक डेकोरेटर लौटाता है। यहाँ एक डेकोरेटर का उदाहरण दिया गया है जो कस्टम संदेश निर्दिष्ट करने के लिए एक तर्क लेता है।

def custom_message_decorator(message):
    def decorator(func):
        def wrapper(*args, **kwargs):
            print(message)
            return func(*args, **kwargs)
        return wrapper
    return decorator

@custom_message_decorator("Starting the function...")
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

कक्षाओं में विधियों के लिए डेकोरेटर

डेकोरेटर का उपयोग क्लास के अंदर विधियों के साथ भी किया जा सकता है। सामान्य उपयोगों में लॉगिंग मेथड कॉल, एक्सेस कंट्रोल और कैशिंग परिणाम शामिल हैं। यहाँ क्लास में मेथड कॉल को लॉग करने के लिए डेकोरेटर का उपयोग करने का एक उदाहरण दिया गया है।

def log_method_call(method):
    def wrapper(self, *args, **kwargs):
        print(f"Calling {method.__name__} with arguments {args} and keyword arguments {kwargs}")
        return method(self, *args, **kwargs)
    return wrapper

class MyClass:
    @log_method_call
    def my_method(self, x, y):
        print(f"Result: {x + y}")

obj = MyClass()
obj.my_method(5, 7)

चेनिंग डेकोरेटर्स

आप एक ही फ़ंक्शन पर कई डेकोरेटर लगा सकते हैं। उन्हें सबसे अंदर वाले डेकोरेटर से सबसे बाहर वाले तक लगाया जाता है। इससे आप अलग-अलग फंक्शनलिटी को एक साथ जोड़ सकते हैं। यहाँ दो डेकोरेटर को चेन करने का एक उदाहरण दिया गया है:

def uppercase_decorator(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result.upper()
    return wrapper

def exclamation_decorator(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result + "!"
    return wrapper

@exclamation_decorator
@uppercase_decorator
def greet(name):
    return f"Hello, {name}"

print(greet("Alice"))

निष्कर्ष

डेकोरेटर पायथन में एक बहुमुखी उपकरण है जो आपको फ़ंक्शन और विधियों के व्यवहार को बढ़ाने या संशोधित करने की अनुमति देता है। डेकोरेटर का उपयोग करके, आप अपने फ़ंक्शन के मूल तर्क को बदले बिना अपने कोडबेस में पुन: प्रयोज्य कार्यक्षमता जोड़ सकते हैं। चाहे लॉगिंग, टाइमिंग या आउटपुट को संशोधित करने के लिए, डेकोरेटर आपके कोड को साफ और रखरखाव योग्य रखने में मदद करते हैं। अपने पायथन प्रोजेक्ट्स में अधिक कुशल बनने और उनकी शक्ति का लाभ उठाने के लिए डेकोरेटर का उपयोग करने का अभ्यास करें।

लिंक
Python