2011-02-23 10 views

उत्तर

14

बदलें

class X(object): 
    var1 = 1 
    def __enter__(self): 
     return self 
    def __exit__(self, type, value, traceback): 
     pass 

with करने के लिए X की परिभाषा वापसी प्रदान करती है as के नाम पर __enter__() विधि का मान । आपका __enter__()None लौटा, जिसे z पर असाइन किया गया था।

मैंने कक्षा को एक नई शैली के वर्ग में भी बदल दिया (जो इसे काम करने के लिए महत्वपूर्ण नहीं है)।

+0

अधिक जानकारी के लिए पीईपी 343 देखना [कड़ी] (http://www.python.org/dev/peps/pep-0343/) जो वाक्य रचना काफी अच्छी तरह से वर्णन करता है – Voo

4

संदर्भ प्रबंधकों के लिए docs देखें:

__enter__( ) क्रम संदर्भ दर्ज करें और या तो इस वस्तु या एक और क्रम संदर्भ से संबंधित वस्तु लौटने। इस विधि द्वारा लौटाए गए मान में इस संदर्भ प्रबंधक का उपयोग करके बयानों के खंड के रूप में पहचानकर्ता के लिए बाध्य है। संदर्भ प्रबंधक का एक उदाहरण जो खुद को लौटाता है फ़ाइल ऑब्जेक्ट है। फ़ाइल वस्तुओं __enter__() से खुद को लौट open() बयान के साथ एक में संदर्भ अभिव्यक्ति के रूप में इस्तेमाल किया जा करने की अनुमति।

एक संदर्भ प्रबंधक कि एक संबंधित ऑब्जेक्ट का एक उदाहरण decimal.Context.get_manager() द्वारा दिया है। ये प्रबंधकों ने सक्रिय दशमलव को मूल दशमलव संदर्भ की एक प्रतिलिपि के संदर्भ में सेट किया और फिर प्रतिलिपि वापस कर दिया। इस बदलाव के बिना बयान के साथ बाहर को प्रभावित करने वाले कोड बयान के साथ की शरीर में वर्तमान दशमलव संदर्भ के लिए किए जाने के लिए अनुमति देता है।

आपकी __enter__ विधि कुछ भी वापस नहीं करती है, जो None लौटने जैसा ही है।

संबंधित मुद्दे