2012-07-27 29 views
31

मेरे पास कक्षा MyThread है। उसमें मेरे पास एक विधि नमूना है। मैं इसे उसी ऑब्जेक्ट संदर्भ से चलाने की कोशिश कर रहा हूं। कृपया कोड पर एक नज़र डालें:पायथन विशेषताएँ त्रुटि: ऑब्जेक्ट में कोई विशेषता नहीं है

class myThread (threading.Thread): 
    def __init__(self, threadID, name, counter, redisOpsObj): 
     threading.Thread.__init__(self) 
     self.threadID = threadID 
     self.name = name 
     self.counter = counter 
     self.redisOpsObj = redisOpsObj 

    def stop(self): 
     self.kill_received = True 

    def sample(self): 
     print "Hello" 

    def run(self): 
     time.sleep(0.1) 
     print "\n Starting " + self.name 
     self.sample() 

यह बहुत आसान लगता है। लेकिन जब मैं इसे चलाता हूं तो मुझे यह त्रुटि मिलती है

AttributeError: 'myThread' object has no attribute 'sample' अब मेरे पास यह तरीका है, ठीक है। तो क्या गलत हुआ? कृपया मदद

संपादित करें: यह स्टैकट्रेस

Starting Thread-0 

Starting Thread-1 
Exception in thread Thread-0: 
Traceback (most recent call last): 
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner 
self.run() 
File "./redisQueueProcessor.py", line 51, in run 
self.sample() 
AttributeError: 'myThread' object has no attribute 'sample' 

Exception in thread Thread-1: 
Traceback (most recent call last): 
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner 
self.run() 
File "./redisQueueProcessor.py", line 51, in run 
self.sample() 
AttributeError: 'myThread' object has no attribute 'sample' 

मैं इसे इस

arThreads = [] 
maxThreads = 2; 

for i in range(maxThreads): 
    redisOpsObj = redisOps() 
    arThreads.append(myThread(i, "Thread-"+str(i), 10, redisOpsObj)) 

खेद है कि मैं पोस्ट नहीं कर सकते redisOps वर्ग कोड की तरह बोल रहा हूँ है। लेकिन मैं आपको आश्वस्त कर सकता हूं कि यह ठीक काम करता है

+0

कॉलस्टैक के साथ पूरी त्रुटि पोस्ट करेगा? – sloth

+0

क्या आप कोड जोड़ सकते हैं कि आप कैसे कॉल कर रहे हैं? – Babu

+2

क्या कोई कोड गुम है। यह स्निपेट मेरे लिए फैन काम करता है। – ThirdOne

उत्तर

59

आपका इंडेंटेशन गुम हो गया है, और आपने टैब और रिक्त स्थान मिश्रित किए हैं। सत्यापित करने के लिए python -tt के साथ स्क्रिप्ट चलाएं।

+0

में "टैब और रिक्त स्थान दिखाएं" चुनना चाहिए, उस आंख खोलने वाले के लिए धन्यवाद। इसे अब पा लिया है। बेवकूफ सवाल के लिए खेद है और इस तरह के एक प्रश्न की बहुत लंबी व्याख्या;) – Shades88

+10

वाह मुझे पता नहीं था '-tt' – n611x007

+0

पाइथन बहु-थ्रेडिंग के दौरान इस प्रकार की बग आम हैं। क्या होता है कि, दुभाषिया आंसू पर, प्रासंगिक मॉड्यूल (इस मामले में मेरा थ्रेड) एक प्रकार के 'डेल myThread' के माध्यम से चला जाता है। – Trevor

5

पाइथन बहु-थ्रेडिंग के दौरान इस प्रकार की बग आम हैं। क्या होता है कि, दुभाषिया आंसू पर, संबंधित मॉड्यूल (myThread इस मामले में) del myThread के प्रकार से गुजरता है।

कॉल self.sample() लगभग myThread.__dict__["sample"](self) के बराबर है। लेकिन अगर हम दुभाषिया के आंसू-डाउन अनुक्रम के दौरान हैं, तो ज्ञात प्रकारों का अपना शब्दकोश पहले से ही myThread हटा दिया गया हो सकता है, और अब यह मूल रूप से NoneType है - और इसमें कोई 'नमूना' विशेषता नहीं है।

0

पायथन कक्षा के नाम को शामिल करने के लिए आंतरिक रूप से नाम बदलकर उन सदस्यों की सुरक्षा करता है। आप इस तरह के गुणों को object._className__attrName के रूप में एक्सेस कर सकते हैं।

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

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