एक प्रकार के डेकोरेटर संपत्ति पाने वाले और बसाने वाले होते हैं। ये डेकोरेटर क्लास इंस्टेंस में वेरिएबल्स तक नियंत्रित पहुंच की अनुमति देते हैं।
प्रॉपर्टी गेटर्स और सेटर्स को ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में विशेषताओं के नियंत्रण के लिए विशेष रूप से डिज़ाइन किया गया है। ये फ़ंक्शन डेकोरेटर से भिन्न हैं क्योंकि इनका उपयोग क्लास विशेषताओं के लिए किया जाता है (फ़ंक्शन डेकोरेटर पर मेरी पोस्ट यहां देखें)।
फ़ंक्शन डेकोरेटर और प्रॉपर्टी गेटर और सेटर डेकोरेटर दोनों पुन: प्रयोज्य कोड के साथ कोड को संशोधित करते हैं और '@' सिंटैक्स का उपयोग करते हैं। वे दोनों कोड की कार्यक्षमता बदलते हैं।
ठीक है, चलिए इसमें शामिल होते हैं।
प्रॉपर्टी गेटर्स और सेटर्स को विभिन्न व्यवहारों को परिभाषित करने के लिए एक वर्ग के भीतर तरीकों पर लागू किया जाता है। एक सेटर विशेषता को एक मान पर सेट करता है, और एक गेटर एक वर्ग से एक विशेषता लेता है। विशेषता सबसे पहले set है।
आइए एक उदाहरण देखें, और फिर हम उसका विश्लेषण करेंगे:
class Shoe: def __init__(self, brand = "Adidas", size = 9): self.brand = brand self.size = size self._condition = "New" @property def size(self): """The size property""" return self._size @size.setter def size(self, size): """size must be an integer""" if isinstance(size, int): self._size = size else: print("size must be an integer") def cobble(self): """Repairs the shoe and sets the condition to 'New'.""" self.condition = "New" print("Your shoe is as good as new!") @property def condition(self): """The condition property""" return self._condition @condition.setter def condition(self, condition): self._condition = condition
आइए इस कोड में से कुछ पर गौर करें:
कुछ विशेषताओं (स्थिति, आकार) से पहले अंडरस्कोर डेवलपर को इंगित करता है कि वे निजी हैं; वे जूता वर्ग (प्रत्येक जूता, लोअरकेस) के प्रत्येक उदाहरण के लिए विशिष्ट हैं।
आप देख सकते हैं कि स्थिति और आकार को अलग-अलग तरीके से तैयार किया जाता है। self._condition = "नया" का अर्थ है कि जूता वर्ग के प्रत्येक उदाहरण (या ऑब्जेक्ट) को "नया" की शर्त के साथ त्वरित किया जाता है। आकार विशेषता के लिए भी ऐसा ही किया जाता है, लेकिन इसे self._size = 9 के रूप में नहीं लिखा जाता है ताकि यह सेटर संपत्ति सत्यापन को ट्रिगर कर सके, क्योंकि आकार को पूर्णांक होना आवश्यक है (यह एक प्रक्रिया है जिसे सत्यापन कहा जाता है)। हम प्रत्येक व्यक्तिगत शू ऑब्जेक्ट की स्थिति को प्रॉपर्टी सेटर और गेटर विधियों के माध्यम से चलाने के बजाय सीधे सेट कर रहे हैं।
कोबल विधि को डेकोरेटर की आवश्यकता नहीं है क्योंकि यह केवल एक क्रिया कर रहा है, प्रत्येक जूते की वस्तु की विशेषता प्राप्त/सेट नहीं कर रहा है।
आइए अपने कोड में एक अंतिम परिवर्तन करें। उदाहरण के लिए, यदि हम यह सुनिश्चित करना चाहते हैं कि आकार विशेषता को बाद में नहीं बदला जा सके तो क्या होगा? आख़िरकार, एक जूता वास्तव में अपना आकार नहीं बदलता है, क्या ऐसा होता है?
हम प्रत्येक जूते की वस्तु की जांच करने के लिए hasattr() फ़ंक्शन का उपयोग कर सकते हैं। क्या इसमें आकार की कोई निजी विशेषता है, जो '_size' की उपस्थिति से संकेतित होती है? यदि हां, तो इसे बदला नहीं जा सकता. यहां लागू किया गया कोड है:
@size.setter def size(self, size): """size must be an integer and can't be changed once set""" if hasattr(self, '_size'): raise AttributeError("Can't change size once set") if isinstance(size, int): self._size = size else: raise ValueError("size must be an integer")
प्रॉपर्टी सेटर्स और गेटर्स को समझना थोड़ा चुनौतीपूर्ण है, लेकिन एक बार समझने के बाद, आप एक पेशेवर की तरह पायथन को कोडिंग करेंगे!
स्रोत:
फ्लैटिरॉन स्कूल सामग्री
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3