Python डेकोरेटर: यह क्या है, कैसे काम करता है और क्यों ज़रूरी है

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Python में डेकोरेटर क्या हैं

अगर आपने Python में एक हफ्ते से ज़्यादा कोड लिखा है, तो आपने फ़ंक्शन के ऊपर @ चिह्न ज़रूर देखा होगा। यही है डेकोरेटर — एक शक्तिशाली और समझने में आसान प्रोग्रामिंग टूल।

Python में डेकोरेटर एक फ़ंक्शन को दूसरे फ़ंक्शन में "लपेटने" का काम करते हैं। ये बिना मूल कोड बदले फ़ंक्शन के व्यवहार को बदलते या बढ़ाते हैं। डेकोरेटर का उपयोग हर जगह होता है: Flask, Django, FastAPI, pytest, और Python की स्टैंडर्ड लाइब्रेरी में भी।

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

डेकोरेटर की मूल बातें

डेकोरेटर एक ऐसा फ़ंक्शन है जो दूसरे फ़ंक्शन को लेता है और एक नया या संशोधित फ़ंक्शन लौटाता है।

def decorator(func):
    def wrapper():
        print("कॉल से पहले")
        func()
        print("कॉल के बाद")
    return wrapper

@decorator
def say_hello():
    print("नमस्ते!")

say_hello()

आउटपुट:

कॉल से पहले
नमस्ते!
कॉल के बाद

@decorator सिंटैक्स वास्तव में यह लिखने का शॉर्टकट है:

say_hello = decorator(say_hello)

डेकोरेटर का आंतरिक कामकाज

Python में डेकोरेटर समझने के लिए ये ज़रूरी अवधारणाएँ जाननी होंगी:

  • Python में फ़ंक्शन प्रथम श्रेणी की वस्तुएँ (first-class objects) हैं
  • फ़ंक्शन को दूसरे फ़ंक्शन में आर्गुमेंट के रूप में भेजा जा सकता है
  • फ़ंक्शन के अंदर दूसरे फ़ंक्शन को परिभाषित किया जा सकता है
  • क्लोज़र (closure) का मैकेनिज़्म मौजूद है

डेकोरेटर का सार्वभौमिक टेम्पलेट

डेकोरेटर का न्यूनतम टेम्पलेट इस प्रकार है:

def decorator(func):
    def wrapper(*args, **kwargs):
        # फ़ंक्शन चलने से पहले की कार्रवाई
        result = func(*args, **kwargs)
        # फ़ंक्शन चलने के बाद की कार्रवाई
        return result
    return wrapper

डेकोरेटर के व्यावहारिक उदाहरण

समय मापने वाला डेकोरेटर

import time

def timing(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        execution_time = time.time() - start
        print(f"{func.__name__} ने {execution_time:.4f} सेकंड लिया")
        return result
    return wrapper

@timing
def slow_func():
    time.sleep(1)
    return "कार्य पूरा हुआ"

slow_func()

यह डेकोरेटर फ़ंक्शन की परफ़ॉर्मेंस जाँचने और कोड ऑप्टिमाइज़ करने में मददगार है।

प्रमाणीकरण जाँचने वाला डेकोरेटर

def require_admin(func):
    def wrapper(user, *args, **kwargs):
        if user != "admin":
            raise PermissionError("पहुँच अस्वीकृत")
        return func(user, *args, **kwargs)
    return wrapper

@require_admin
def delete_database(user):
    print("डेटाबेस हटा दिया गया!")
    return True

delete_database("admin")  # सफल निष्पादन

ऐसा डेकोरेटर एप्लिकेशन की सुरक्षा सुनिश्चित करता है और महत्वपूर्ण फ़ंक्शन तक पहुँच को नियंत्रित करता है।

लॉगिंग डेकोरेटर

import logging
from functools import wraps

def log_calls(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        logging.info(f"फ़ंक्शन {func.__name__} को आर्गुमेंट {args}, {kwargs} के साथ कॉल किया गया")
        try:
            result = func(*args, **kwargs)
            logging.info(f"फ़ंक्शन {func.__name__} सफलतापूर्वक चला")
            return result
        except Exception as e:
            logging.error(f"फ़ंक्शन {func.__name__} में त्रुटि: {e}")
            raise
    return wrapper

आर्गुमेंट वाले डेकोरेटर

डेकोरेटर फ़ैक्टरी बनाना

जब डेकोरेटर को पैरामीटर लेने की ज़रूरत हो, तो डेकोरेटर फ़ैक्टरी बनाई जाती है:

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            results = []                

ब्लॉग

पुस्तक अनुशंसाएँ