


पायथन में डेकोरेटर्स को समझना
डेकोरेटर एक डिज़ाइन पैटर्न है जो आपको ऑब्जेक्ट के मूल कार्यान्वयन को बदले बिना किसी ऑब्जेक्ट के व्यवहार को संशोधित या विस्तारित करने की अनुमति देता है। दूसरे शब्दों में, डेकोरेटर आपको किसी मौजूदा ऑब्जेक्ट में उसके मूल कोड को संशोधित किए बिना नई कार्यक्षमता जोड़ने की अनुमति देता है। डेकोरेटर आमतौर पर एक फ़ंक्शन होता है जो किसी ऑब्जेक्ट को तर्क के रूप में लेता है और एक नया ऑब्जेक्ट लौटाता है जो मूल ऑब्जेक्ट को "लपेटता" है। नई वस्तु में मूल वस्तु के समान ही विधियाँ और विशेषताएँ हैं, लेकिन इसमें कुछ अतिरिक्त कार्यक्षमता या व्यवहार भी है जो डेकोरेटर द्वारा प्रदान किया जाता है। उदाहरण के लिए, मान लें कि आपके पास `कार` नामक एक वर्ग है जिसमें `ड्राइव' नामक एक विधि है ()` जिससे कार चलती है। आप `स्पीडलिमिटडेकोरेटर` नामक एक डेकोरेटर बना सकते हैं जो कार की गति को सीमित करने के लिए `ड्राइव()` विधि को संशोधित करता है। `स्पीडलिमिटडेकोरेटर` मूल `कार` ऑब्जेक्ट को एक तर्क के रूप में लेगा और एक नया `कार` ऑब्जेक्ट लौटाएगा जिसमें मूल `कार` के समान तरीके और विशेषताएं होंगी, लेकिन गति को सीमित करने की अतिरिक्त कार्यक्षमता के साथ। यहां एक है आप पायथन में डेकोरेटर का उपयोग कैसे कर सकते हैं इसका उदाहरण:
```क्लास कार:
डीईएफ़ ड्राइव(स्वयं):
प्रिंट('कार चल रही है')
क्लास स्पीडलिमिटडेकोरेटर:
डीईएफ़ __init__(सेल्फ, कार):
स्व. कार = कार
डीईएफ़ ड्राइव(स्वयं):
self.car.drive()
प्रिंट("कार अब 50 मील प्रति घंटे तक सीमित है")
कार = कार()
स्पीड_लिमिटेड_कार = स्पीडलिमिटडेकोरेटर(कार)स्पीड_लिमिटेड_कार.ड्राइव() # प्रिंट "कार चल रही है" और "कार अब 50 मील प्रति घंटे तक सीमित है"
```
इस उदाहरण में, `स्पीडलिमिटडेकोरेटर` वर्ग अपने कंस्ट्रक्टर में एक `कार` ऑब्जेक्ट को एक तर्क के रूप में लेता है, और फिर `ड्राइव() को संशोधित करता है )` मूल `कार` वस्तु की गति को सीमित करने की विधि। `स्पीडलिमिटडेकोरेटर` वर्ग की अपनी `ड्राइव()` विधि भी है जो लपेटे गए ऑब्जेक्ट की मूल `ड्राइव()` विधि को कॉल करती है, लेकिन 50 मील प्रति घंटे की अतिरिक्त सीमा के साथ।
डेकोरेटर मौजूदा ऑब्जेक्ट को संशोधित करने या विस्तारित करने के लिए एक शक्तिशाली उपकरण हैं उनके मूल कार्यान्वयन को बदले बिना। उनका उपयोग शेष कोड को प्रभावित किए बिना नई कार्यक्षमता जोड़ने, व्यवहार को संशोधित करने या किसी ऑब्जेक्ट के कार्यान्वयन के कुछ हिस्सों को बदलने के लिए भी किया जा सकता है।



