Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

मैं पाइथन ऑब्जेक्ट को सही तरीके से कैसे साफ़ करूं?


वैश्विकों को कोई नहीं पर सेट करने से उनकी सफाई होती है। स्थानीय लोग सत्र के अंत में स्वयं को नष्ट कर देते हैं। फ़ंक्शन __del__ जिसे पायथन द्वारा बुलाया जाता है, ग्लोबल्स को कोई नहीं पर सेट करता है।

निम्न कोड पर विचार करें जहां दिए गए वर्ग में सभी वस्तुओं की सफाई है -

उदाहरण

class Counter:
    Count = 0   # This is the count of objects of this class
    def __init__(self, name):
        self.name = name
        print name, 'created'
        Counter.Count += 1
    def __del__(self):
        print self.name, 'deleted'
        Counter.Count -= 1
        if Counter.Count == 0:
            print 'Last Counter object deleted'
        else:
            print Counter.Count, 'Counter objects remaining'
x = Counter("First")
del x

अंतिम डेल के बिना, आपको एक अपवाद मिलता है।

पायथन डॉक्स से __del__ के बारे में -

चेतावनी:अनिश्चित परिस्थितियों के कारण __del__() विधियों को लागू किया जाता है, उनके निष्पादन के दौरान होने वाले अपवादों को अनदेखा कर दिया जाता है, और इसके बजाय sys.stderr पर एक चेतावनी मुद्रित की जाती है। साथ ही, जब __del__() मॉड्यूल को हटाए जाने के जवाब में लागू किया जाता है (उदाहरण के लिए, जब प्रोग्राम का निष्पादन किया जाता है), __del__() विधि द्वारा संदर्भित अन्य ग्लोबल्स पहले ही हटा दिए जा सकते हैं। इस कारण से, __del__() विधियों को बाहरी इनवेरिएंट को बनाए रखने के लिए आवश्यक न्यूनतम न्यूनतम कार्य करना चाहिए।

डेल को स्पष्ट कॉल के बिना, __del__ केवल कार्यक्रम के अंत में बुलाया जाता है, काउंटर और/या गणना पहले से ही जीसी-एड हो सकती है जब तक कि __del__ को कॉल नहीं किया जाता है (जिस क्रम में वस्तुओं को एकत्र किया जाता है वह नियतात्मक नहीं है)। अपवाद का अर्थ है कि काउंटर पहले ही एकत्र किया जा चुका है। आप __del__ के साथ विशेष रूप से फैंसी कुछ भी नहीं कर सकते।

यहां दो संभावित समाधान हैं।

  • फ़ाइल ऑब्जेक्ट के लिए एक स्पष्ट फ़ाइनलाइज़र विधि का उपयोग करें, जैसे क्लोज़()।

  • कमजोर संदर्भों का प्रयोग करें।


  1. नेस्टेड पायथन डिक्शनरी कैसे बनाएं?

    एक शब्दकोश वस्तु परिवर्तनशील है। इसलिए एक शब्दकोश वस्तु को एक कुंजी के मूल्य घटक के रूप में इस्तेमाल किया जा सकता है। तो हम एक नेस्टेड डिक्शनरी ऑब्जेक्ट बना सकते हैं एक अन्य डिक्शनरी ऑब्जेक्ट को कुंजी से जुड़े मूल्य के रूप में परिभाषित किया गया है। >>> students={"student1":{"

  1. शब्दकोश के भीतर एक पायथन शब्दकोश को कैसे परिभाषित करें?

    एक शब्दकोश वस्तु परिवर्तनशील है। इसलिए एक शब्दकोश वस्तु को एक कुंजी के मूल्य घटक के रूप में इस्तेमाल किया जा सकता है। इसलिए हम एक नेस्टेड डिक्शनरी ऑब्जेक्ट बना सकते हैं एक अन्य डिक्शनरी ऑब्जेक्ट को कुंजी से जुड़े मूल्य के रूप में परिभाषित किया गया है। >>>> students={"student1":

  1. पाइथन फ़ंक्शन से जेसन ऑब्जेक्ट कैसे वापस करें?

    हम दिए गए पायथन डिक्शनरी का उपयोग करते हुए एक पायथन फ़ंक्शन से एक json ऑब्जेक्ट लौटाते हैं। उदाहरण import json a = {'name':'Sarah', 'age': 24, 'isEmployed': True } # a python dictionary def retjson(): python2json = json.dumps(a) print python2json retjson() आउटपुट {&qu