2011-01-29 4 views
13

ऐसा लगता है जैसे मुझे कुछ समझ नहीं आया --- पायथन with कथन। जब इसे का उपयोग with साथ, की तरह मेंपायथन का 'स्टेटमेंट' लक्ष्य लक्ष्य अप्रत्याशित रूप से कोई नहीं है

with test() as michael: 
    print repr(michael) 

मैं memore blah > पर < परीक्षण उदाहरण की तरह कुछ उत्पादन उम्मीद करेंगे अब

class test(object): 
    def __enter__(self): pass 
    def __exit__(self, *ignored): pass 

,:

इस वर्ग पर विचार करें। लेकिन मुझे कोई नहीं मिला

कुछ गलत यहाँ है? कोई सुझाव मदद करेगा।

(मैं अजगर 2.6.6 का उपयोग कर रहा हूँ।)

संपादित करें: मुझे प्रलेखन की ओर इशारा करते के लिए ephement-

धन्यवाद। __enter__ विधि पढ़ना चाहिए with प्रलेखन से

def __enter__(self): return self 

उत्तर

18

:

लक्ष्य with बयान में शामिल किया गया था, __enter__() से वापसी मान में डाला गया है।

यदि आप def __enter__(self): return self, तो आपके अपेक्षित आउटपुट का उत्पादन होता है।

2

the docs से:

object.__enter__(self)

इस वस्तु से संबंधित क्रम संदर्भ दर्ज करें। with कथन इस विधि के वापसी मूल्य को as कथन के खंड में उल्लिखित लक्ष्य (ओं) में बाध्य करेगा, यदि कोई हो।

-1

मैं के लिए repr(michael)

एक ही बात पाने के बजाय इस प्रयास करें:

m.__repr__() 

मैं पूरी तरह यकीन नहीं है, लेकिन मुझे लगता है कि इस तथ्य के साथ क्या करने के लिए कुछ है कि आप हेवन repr विधि को test वर्ग

+0

नहीं, 'ऑब्जेक्ट .__ repr__' का उपयोग किया गया है: –

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