मेरे पास दो वर्ग हैं, classA
और classB
। classA
में image
नाम की एक विशेषता होती है जिसमें डेटा होता है जो हर समय बदलता रहता है। मैं classB
का एक उदाहरण प्राप्त करने में सक्षम होना चाहता हूं कि जब मैं इस उदाहरण पर एक विधि को कॉल करता हूं, तो यह classA
से self.image
तक पहुंच सकता है। दुर्भाग्य से मेरे प्रयास विफल हो रहे हैं।
उदाहरण कोड:
classA:
def __init__(self):
self.image = None #initialise
analysis = classB(self)
def doingstuff(self):
self.image = somethingchanginghere()
measurement = analysis.find_something_cool()
print measurement
classB:
def __init__(self, master):
self.image = master.image #get a reference to the data from other class
def do_something_cool(self):
return type(self.image) #find something about the data at the point when method is called
main = classA()
main.doingstuff()
मुझे एक त्रुटि मिलती है जो कहती है कि डेटा अभी भी None
है, यानी यह अभी भी उस स्थिति में है जब इसे प्रारंभ किया गया था और classA
से classB
का संदर्भ अपडेट नहीं हुआ है जब self.image में क्लास ए बदल गया। मैंने क्या गलत किया है?
कार्यशील उदाहरण NoneType
क्यों देता है? मैं एक यादृच्छिक संख्या की उम्मीद कर रहा हूँ।
1 उत्तर
आपके कोड में दो समस्याएं हैं:
analysis
,classA.__init__
औरclassA.doingstuff
फंक्शन के लिए एक वैरिएबल लोकल है। यदि आप इसे अन्य कार्यों में पुन: उपयोग करना चाहते हैं, तो आपको इसे एक विशेषता के रूप में परिभाषित करना चाहिए:self.analysis = classB(self)
।पायथन संदर्भ द्वारा चर पारित नहीं करता है। जब आप
analysis = classB(self)
करते हैं, तो आपclassB
का एक ऑब्जेक्ट बनाते हैं, ऑब्जेक्टself
को तर्क के रूप में पास करते हैं। यह ऑब्जेक्ट का संदर्भ नहीं है, इसलिएclassB.image
सेट किया गया है और/या केवल एक बार,classB.__init__
में बदला गया है। यदि आप इसे अद्यतन रखना चाहते हैं, तो आपको यह करना चाहिए:classB: def __init__(self, master): self.master = master
और फिर छवि प्राप्त करने के लिए
master.image
का उपयोग करें, या एकclassB
विधि लागू करें उदा।def update(self, image): self.image = image
और इसे हर बार
image
बदलने पर कॉल करें।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
print
कथन Python 2.x का सुझाव देते हैं, लेकिन आपobject
से इनहेरिट नहीं करते हैं, इसलिए आपकी कक्षाएं "पुरानी शैली" की हैं, जो कि खराब अभ्यास है। साथ ही,class
के बिना यह वाक्य रचना की दृष्टि से अमान्य है जैसा कि पोस्ट किया गया है। क्याnumpy
वास्तव में यहां प्रासंगिक है? क्या आप न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण को और कम कर सकते हैं?self.master = master
करें औरself.master.image
का उपयोग करें। वह वस्तु अद्यतन के रूप में अद्यतन करता रहेगा।