is a decorator in python exactly the same as calling a function on a function? -


मैंने सोचा कि

  @f def g (): प्रिंट 'हैलो'   

बिल्कुल वैसा ही है

  def g (): प्रिंट 'हैलो' g = f (g)  

लेकिन, मुझे यह कोड था, जो contextlib.contextmanager का उपयोग करता है:

  @ contextlib.contextmanager def f (): प्रिंट 1 उपज प्रिंट 2 से f: प्रिंट 3  

जो काम करता है और पैदावार 1 3 2

और जब मैं इसे बदलने की कोशिश की

  def f (): print 1 प्राप्ति प्रिंट 2 f = contextlib.contextmanager (f) f: print 3  

मुझे मिल रहा है AttributeError: 'function' ऑब्जेक्ट में कोई विशेषता नहीं है '__exit __'

मुझे क्या याद आ रहा है? क्या कुछ काले जादू विशेष रूप से contextlib.contextmanager में है, या मैं गलत तरीके से समझता हूँ कि सजावट सामान्य रूप में कैसे काम करती है?

हां, डेकोरेटर फ़ंक्शन को कॉल करने और वापस लौटने वाले मूल्य को निर्दिष्ट करने के समान है

इस मामले में त्रुटि आती है क्योंकि आप फ़ंक्शन कॉल नहीं कर रहे हैं, इसलिए सही कोड होगा

  def एफ (): प्रिंट 1 उपज प्रिंट 2 एफ = संदर्भ लिब.कंटेस्टमैनेजर (एफ) के साथ एफ (): प्रिंट 3  

मुझे यकीन नहीं है कि आपने कोड का परीक्षण किया है, क्योंकि आपके पास डेकोरेटर कोड है

त्रुटि: / P>

  के साथ: एट्रिब्यूट त्रुटि: 'फ़ंक्शन' ऑब्जेक्ट में कोई विशेषता नहीं है '__exit__'  

Comments