पहली नज़र में, ऐसा लगता है कि पाइथन की __del__
विशेष विधि सी ++ में विनाशक के समान फायदे प्रदान करती है। लेकिन पाइथन दस्तावेज के अनुसार (https://docs.python.org/3.4/reference/datamodel.html), कोई गारंटी है कि आपकी ऑब्जेक्ट की __del__
विधि कभी भी कॉल हो जाती है!आरएआईआई: __del__ का क्या मतलब है?
यह गारंटी नहीं है कि
__del__
() विधियों को ऑब्जेक्ट्स के लिए बुलाया जाता है जो दुभाषिया से बाहर निकलने पर मौजूद हैं।
तो दूसरे शब्दों में, विधि बेकार है! यही है ना एक हुक फ़ंक्शन जो वास्तव में बुलाया जा सकता है या नहीं, वास्तव में बहुत अच्छा नहीं करता है, इसलिए __del__
RAII के संबंध में कुछ भी नहीं प्रदान करता है। अगर मेरे पास कुछ आवश्यक सफाई है, तो मुझे कुछ समय चलाने के लिए इसकी आवश्यकता नहीं है, ओह, जब कभी भी जीसी वास्तव में ऐसा लगता है, तो मुझे विश्वसनीय रूप से, निश्चित रूप से और 100% समय चलाने की आवश्यकता है।
मुझे पता है कि अजगर संदर्भ प्रबंधकों, जो दूर उस कार्य के लिए अधिक उपयोगी हैं प्रदान करता है, लेकिन क्यों __del__
पर चारों ओर रखा गया था? क्या बात है?
मुझे वास्तव में यह नहीं मिलता कि आप वास्तव में क्या पूछ रहे हैं। क्या आपका प्रश्न "क्या' __del__' अनिवार्य रूप से बेकार है? "? (मेरा मानना है कि यह आपका प्रश्न है) इस मामले में मेरा मानना है कि आप सी ++ या आरएआईआई के सभी संदर्भों को हटाकर प्रश्न को स्पष्ट करेंगे, जो पूरी तरह से असंबंधित हैं। यदि आपका प्रश्न है "पायथन में आरएआईआई को कैसे कार्यान्वित करें? क्या मैं इसके लिए' __del__' का उपयोग कर सकता हूं? " तो आपको शायद अपने प्रश्न में बहुत सारी चीजें बदलनी होंगी। – Bakuriu
@ बाकुरीयू इस मामले का क्रूक्स है,'__del__ 'का बिंदु क्या है? क्या कोई विधि के लिए यथार्थवादी उपयोग केस नाम दे सकता है? – antred