मैं पाइथन में किसी अन्य मॉड्यूल या फ़ंक्शन के नामस्थान तक कैसे पहुंचूं?

उदाहरण के लिए, मान लें कि मेरे पास एक फ़ंक्शन f तक पहुंच है जिसे पारित कर दिया गया है, और मैं एक वेरिएबल प्राप्त करना चाहता हूं जिसकी पहुंच है।

class function_creator():
  def __init__(self, start_num):
    self.number = start_num


  def getfunc(self):
    def nestedfunc():
      print(f'The number you were trying to find was {self.number}')
      self.number += 1
    return nestedfunc

f = function_creator(5).getfunc()

रनिंग f() नंबर प्रिंट करेगा, हालाँकि मुझे यह नहीं मिल रहा है कि इसे सीधे कैसे एक्सेस किया जाए।

-1
Kyubane 14 अप्रैल 2020, 22:25

1 उत्तर

सबसे बढ़िया उत्तर

जिस तरह से आप कोड को कॉल कर रहे हैं, उस नंबर पर पहुंचने का कोई अच्छा तरीका नहीं है। लेकिन अगर आपने function_creator की आवृत्ति को एक चर में सहेजा है, तो आप इसे और अधिक आसानी से प्राप्त करने में सक्षम होंगे:

fc = function_creator(5)
f = fc.getfunc()

f()
print(fc.number)

जबकि मैंने कहा कि मूल्य तक पहुँचने का कोई अच्छा तरीका नहीं है, यह फ़ंक्शन ऑब्जेक्ट के आंतरिक भाग में गोता लगाकर संभव है, क्योंकि फ़ंक्शन self से getfunc चर पर बंद है। आप उस self तर्क का मान f से f.__closure__[0].cell_contents का उपयोग करके प्राप्त कर सकते हैं, और फिर इसकी number विशेषता की जांच करके संख्या प्राप्त कर सकते हैं:

f = function_creator(5).getfunc()
f()

fc = f.__closure__[0].cell_contents
print(fc.number)

यह सीपीथन विशिष्ट है, और शायद अन्य पायथन दुभाषियों में काम नहीं करेगा।

2
Blckknght 14 अप्रैल 2020, 19:41