2012-07-21 8 views
6

मैंने पिछले कुछ दिनों में अजगर सीखना शुरू कर दिया है, और ऑब्जेक्ट उन्मुख प्रोग्रामिंग की खोज करते समय मैं समस्याओं में भाग रहा हूं। मैं pydev प्लगइन चलाते समय ग्रहण का उपयोग कर रहा हूं, पाइथन 3.3 बीटा पर चल रहा हूं, और विंडोज 64 बिट सिस्टम का उपयोग कर रहा हूं।पायथन में अन्य कक्षाओं को सही तरीके से कैसे बढ़ाया जाए? (पायथन v3.3)

मैं कक्षा के ठीक शुरू कर सकता हूं और इसके भीतर किसी भी तरीके का उपयोग कर सकता हूं, जब तक कि मैं सुपरक्लास (प्रत्येक वर्ग जिसे मैंने एक अलग स्रोत फ़ाइल में कोड किया है) का विस्तार करने की कोशिश नहीं कर रहा हूं, उदाहरण के लिए, निम्न कोड संकलन और ठीक चलाता है।

class pythonSuper: 
    string1 = "hello" 
    def printS(): 
     print pythonSuper.string1 

और पहुँच सकते हैं और इसे चलाने के लिए कोड ...

from stackoverflow.questions import pythonSuper 
class pythonSub: 
    pysuper = pythonSuper.pythonSuper() 
    pysuper.printS() 

जैसा कि मैंने कहा, कि काम करता है। निम्नलिखित कोड

class pythonSuper: """Same superclass as above. unmodified, except for the spacing""" 
string1 = "hello" 
def printS(self): 
    print(pythonSuper.string1) 

अच्छा, यह बिल्कुल सही नहीं है। सुपरक्लास कम से कम मेरे ज्ञान के लिए बिल्कुल ठीक है। यह उपवर्ग कि

from stackoverflow.questions import pythonSuper 
class pythonSub(pythonSuper): 
    pass 

pythonObject = pythonSub() 
pythonSub.pythonSuper.printS() 

जब उपवर्ग चलाया जाता है ग्रहण इस त्रुटि

Traceback (most recent call last): 
    File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",   
    line 7, in <module> 
class pythonSub(pythonSuper): 
TypeError: module.__init__() takes at most 2 arguments (3 given) 

मुझे पता नहीं क्या हो रहा है है बाहर प्रिंट बाहर weirds है। मैं तत्काल से ट्यूटोरियल से पायथन सीख रहा हूं, लेकिन वे पुराने हैं (मुझे लगता है कि उनका ट्यूटोरियल कोड पायथन संस्करण 2.7 का उपयोग करता है)। वह आईडीएलई में भी कोड करता है, जिसका अर्थ है कि उसकी कक्षाएं सभी एक फाइल में निहित हैं। मेरा, हालांकि, सभी अपने आप में फाइलों में कोडित हैं। इसका मतलब है कि मुझे नहीं पता कि मुझे जो कोड त्रुटियां मिल रही हैं, वे पुरानी वाक्यविन्यास या इस भाषा पर ज्ञान की कमी का परिणाम हैं। लेकिन मैं पीछे हटा। अगर कोई समाधान और/या स्पष्टीकरण के साथ वापस पोस्ट कर सकता है कि कोड गलत क्यों हो रहा है और मैं इसे ठीक करने के लिए क्या कर सकता हूं। एक स्पष्टीकरण पसंद किया जाएगा। मैं बल्कि यह जानना चाहता हूं कि मैं क्या गलत कर रहा हूं, इसलिए मैं कुछ स्थितियों की प्रतिलिपि बनाने और चिपकाने के बजाय समान परिस्थितियों में समस्या से बच सकता हूं और यह देख सकता हूं कि यह काम करता है। धन्यवाद, और मैं आपके उत्तरों के लिए तत्पर हूं

उत्तर

0

pythonSuper कक्षा को नहीं, बल्कि मॉड्यूल को संदर्भित करता है।

class pythonSub(pythonSuper.pythonSuper): 
    pass 
+0

धन्यवाद, लेकिन अब यह इस त्रुटि को पोस्ट कर रहा है Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "सी: \ उपयोगकर्ता \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub।पीई ", लाइन 11, pythonSub.pythonSuper.printS() विशेषताएँ त्रुटि: टाइप ऑब्जेक्ट 'पायथन सॉब' में कोई विशेषता नहीं है 'पायथन सुपर' और मैं किसी को भी परेशान नहीं करना चाहता, लेकिन किसी भी कारण से? – pipsqueaker117

+3

आप क्यों उम्मीद करेंगे यह करने के लिए? pythonSub pythonSuper का विस्तार कर रहा है, इसमें शामिल नहीं है। 'प्रिंटएस' विरासत में मिला है, और आप सीधे अपने पायथन सॉब उदाहरण के माध्यम से इसका उपयोग करते हैं। –

+0

@DanielRoseman मुझे खेद है, जो मेरे सिर पर थोड़ा सा उड़ गया। क्या आप इसे समझा सकते हैं , उम, नोब भाषा? (वैकल्पिक रूप से आप मुझे उस पृष्ठ से लिंक कर सकते हैं जहां मैं यह सब सामान सीख सकता हूं)। – pipsqueaker117

3

मैंने कुछ संशोधनों के बावजूद आपका कोड चलाया और यह पूरी तरह से चलता है। यहाँ मेरी कोड है:

pythonSuper:

class pythonSuper: 
    string1 = 'hello' 
    def printS(self): 
     print(self.string1) 

मुख्य:

from pythonSuper import pythonSuper as pySuper 

class pythonSub(pySuper): 
    pass 

pythonObject = pythonSub() 
pythonObject.printS() 

नोट:

अपने कोड में: परिवर्तन मैं अपने कोड को बना दिया है निम्नलिखित है , आपने pythonSub.pythonSuper.printS() लिखा है जो सही नहीं है, क्योंकि pythonSub के माध्यम से आप पहले से ही printS() मेथो का समर्थन करते हैं डी, सीधे superclass से विरासत में मिला। तो उस कथन में स्पष्ट रूप से सुपरक्लास को संदर्भित करने की कोई आवश्यकता नहीं है। उपरोक्त, pythonObject.printS() को प्रतिस्थापित करने के लिए मैंने जो बयान दिया था, ऐसा लगता है कि इस मुद्दे को संबोधित किया गया है।

+0

इससे मुझे त्रुटि मिलती है ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "सी: \ उपयोगकर्ता \ Anish \ workspace \ पायथन 3.3 \ stackoverflow \ questions \ pythonSub.py ", लाइन 8, कक्षा पायथन nSub (pySuper): टाइप एरर: मॉड्यूल .__ init __() में अधिकतम 2 तर्क (3 दिए गए) होते हैं, मैंने कोड को कॉपी और पेस्ट करने की कोशिश की (मेरे अपने पैकेज नाम के साथ), लेकिन परिणाम उपर्युक्त त्रुटि थी। मुझे लगता है कि यह एक पायथन 3.3 वाक्यविन्यास चीज है क्योंकि दो समाधान पहले से ही असफल हो गए हैं (इस अर्थ में कार्यक्रम सही नहीं चला था), लेकिन मैं – pipsqueaker117

+0

पर पूरी तरह से बंद हो सकता हूं, कृपया कोड पोस्ट करें, और मेरे लिए त्रुटि आपकी मदद करने में बेहतर सक्षम है। मेरा मानना ​​है कि यह एक गलती है जिसे आपने कोड के अपने संस्करण पर बनाया है, मैंने उपरोक्त पायथन 3.3 पर लिखा है और यह बहुत अच्छा काम करता है! – NlightNFotis

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