हर बार जब हम एक नया वर्ग बनाते हैं तो पायथन हर विशेषता को एक dict विशेषता में संग्रहीत करता है जिसे डायनामिक डिक्शनरी कहा जाता है। यह डिफ़ॉल्ट व्यवहार सुविधाजनक प्रतीत होता है, क्योंकि यह लचीला है, लेकिन जब आप बड़ी संख्या में उदाहरणों या मेमोरी उपयोग के मामलों के साथ काम कर रहे हैं तो यह ओवरहेड महत्वपूर्ण हो सकता है।
पायथन मूल रूप से वर्ग विशेषताओं को संग्रहीत करने के लिए एक शब्दकोश का उपयोग करता है, लेकिन विकल्पों में से एक slots का उपयोग करना है। इस नाम को परिभाषित करके, हम पायथन को अधिक स्थिर और कॉम्पैक्ट संरचना का उपयोग करने के लिए कह रहे हैं जो मेमोरी उपयोग को काफी कम कर देता है। किसी कक्षा में स्लॉट का उपयोग कैसे करें इसका एक बुनियादी उदाहरण यहां दिया गया है।
import sys class WithoutSlots: def __init__(self, x, y): self.x = x self.y = y class WithSlots: __slots__ = ['x', 'y'] def __init__(self, x, y): self.x = x self.y = y obj1 = WithoutSlots(1, 2) obj2 = WithSlots(1, 2) print(sys.getsizeof(obj1.__dict__)) # 296 print(sys.getsizeof(obj2)) # 48
जैसा कि ऊपर दिखाया गया है 'विदस्लॉट्स' की तुलना में 'विदाउटस्लॉट्स' बहुत अधिक मेमोरी का उपयोग करता है। कक्षा के कई उदाहरण बनाने के बारे में सोचें - कौन सा दृष्टिकोण बेहतर विकल्प होगा?
slots उपयोगी उपकरण हो सकता है, लेकिन सीमाओं के साथ आता है:
obj = WithSlots(1, 2) obj.z = 3 # This will raise an AttributeError
हम dict को स्लॉट में जोड़कर इससे निजात पा सकते हैं।
कोई एकाधिक वंशानुक्रम नहीं: प्रत्येक बेस क्लास में slots परिभाषित होना चाहिए, अन्यथा पायथन इंस्टेंस विशेषताओं को संग्रहीत करने के लिए शब्दकोश का उपयोग करने पर वापस लौट आएगा।
कोई डिफ़ॉल्ट मान नहीं: आपको init विधि में स्पष्ट रूप से डिफ़ॉल्ट मान प्रारंभ करने की आवश्यकता है।
मैंने कुछ बेहतरीन परिदृश्य उदाहरण लिखे हैं जहां हम स्लॉट का उपयोग कर सकते हैं:
पायथन में इस प्रकार slots का उपयोग किया जाता है: आप उनका उपयोग तब कर सकते हैं जब आप आश्वस्त हों कि आपको अपनी कक्षा के लिए किसी अन्य विशेषता की आवश्यकता नहीं होगी और आप इसके साथ काम कर रहे हैं उदाहरणों की एक बड़ी संख्या. slots को परिभाषित करके, आप पायथन को विशेषताओं को संग्रहीत करने के लिए एक अधिक कुशल और कॉम्पैक्ट संरचना का उपयोग करने के लिए कहते हैं, जो मेमोरी को बचाने में मदद करता है। यह विशेष रूप से तब उपयोगी होता है जब मेमोरी उपयोग चिंता का विषय हो या जब आपको प्रदर्शन को अनुकूलित करने की आवश्यकता हो। बस याद रखें कि slots के साथ, आप गतिशील रूप से नई विशेषताएँ नहीं जोड़ सकते हैं, इसलिए इसका सबसे अच्छा उपयोग तब किया जाता है जब आपकी कक्षा विशेषताएँ निश्चित और अच्छी तरह से परिभाषित हों।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3