उदाहरण चर के लिए मैं Contextmanager का उपयोग कैसे करूं? जैसे मान लें कि मुझे कुछ Connection
कक्षा मिली है, जिसे विनाश पर बंद किया जाना चाहिए। अगर मैं इसे कॉन्टेक्स्ट मैनेजर के रूप में कार्यान्वित करना चाहता था तो मैं कर सकता था।उदाहरण चर के लिए संदर्भ प्रबंधक का उपयोग कैसे करें
with Connection() as c:
c.write('FOO')
c.ask('BAR?')
और यह स्वचालित रूप से विनाश पर बंद हो जाएगा। लेकिन अगर मैं इसे किसी अन्य वर्ग के __init__
में उपयोग करना चाहता था, तो क्या होगा निम्नलिखित उदाहरण की तरह?
class Device(object):
def __init__(self):
self.connection = Connection() # Must be closed on destruction.
मैं इसे कन्स्ट्रक्टर के बाहर निकलने के लिए बंद नहीं करना चाहता, यह वस्तु नष्ट होने पर मरनी चाहिए। मैं __del__
का उपयोग कर सकता हूं लेकिन इसका डाउनसाइड्स है। सी ++ में आरएआईआई में इस्तेमाल होने के कारण यह मुझे परेशान करता है।
तो इस मामले में ऐसा करने का सबसे अच्छा तरीका क्या है?
ऑब्जेक्ट विनाश का समय किसी भी चीज़ के लिए सही समय नहीं है, खासकर संसाधन प्रबंधन के लिए नहीं। भूल जाओ कि कचरा संग्रह जैसी चीज है और सभी वस्तुओं को अनिश्चित काल तक जीते हैं। – delnan