2010-06-25 10 views
16

मैं एडाप्टर खोजने के लिए एक प्रोग्राम लिख रहा हूं, और 'एडाप्टर' नामक एक कक्षा बनाई है। जब मैं दो तर्कों में प्रवेश करता हूं IDLE मुझे एक त्रुटि देता है कि मैं तीन में पास हुआ! यहाँ कोड और स्टैक ट्रेस है:पायथन: __init __() वास्तव में 2 तर्क लेता है (3 दिया गया)

#This is the adapter class for the adapter finder script 

class Adapter: 
    side1 = (None,None) 
    side2 = (None,None) 
    '''The class that holds both sides of the adapter''' 
    def __init__((pType1,pMF1),(pType2,pMF2)): 
     '''Initiate the adapter. 

     Keyword Arguments: 
     pType1 -- The passed type of one side of the adapter. ex: BNC, RCA 
     pMF1 -- The passed gender of pType1. ex: m, f 

     pType2 -- The passed type of one side of the adapter. ex: BNC, RCA 
     pMF2 -- The passed gender of pType2. ex: m, f 

     ''' 

     print 'assigining now' 
     side1 = (pType1,pMF1) 
     print side1 
     side2 = (pType2,pMF2) 
     print side2 

sideX = ('rca','m') 
sideY = ('bnc','f') 

x = Adapter(sideX,sideY) 
print x.side1 
print x.side2 

त्रुटि: Traceback (most recent call last): File "C:\Users\Cody\Documents\Code\Python\Adapter Finder\adapter.py", line 28, in <module> x = Adapter(sideX,sideY) TypeError: __init__() takes exactly 2 arguments (3 given)

मुझे समझ नहीं आता कि समस्या क्या है, क्योंकि मैं केवल दो आर्ग द्वारा दर्ज किए गए है!

संपादित करें: मैं अजगर भाषा में नया हूं, हालांकि मुझे जावा पता है। मैं एक ट्यूटोरियल के रूप में इस पेज का उपयोग कर रहा: http://docs.python.org/tutorial/classes.html

+2

'__init__' की आपकी परिभाषा रास्ता है, गलत है। आप किस ट्यूटोरियल का उपयोग कर रहे हैं? तुमने ऐसा क्यों लिखा? आपने 'स्वयं' चर क्यों छोड़ा? कृपया उस ट्यूटोरियल का नाम या लिंक शामिल करें जिसका आप उपयोग कर रहे हैं। –

+4

आपकी तर्क सूची में टुपल अभिव्यक्तियों का उपयोग बहुत गैर-मूर्खतापूर्ण पायथन है और कई लोगों को भ्रमित करेगा। मेरा सुझाव है कि आप ऐसा नहीं करते हैं, खासकर जब से आप उन्हें किसी और चीज के रूप में एक टुपल के रूप में असाइन करते हैं। कृपया बहुत अजीब लेकिन अजीब तरह से काम करने वाले पायथन संरचनाओं का उपयोग न करें जब तक कि आपके पास वास्तव में शानदार कारण नहीं है। – Omnifarious

+0

अलग-अलग लोग अलग-अलग तरीकों से सीखते हैं, आप divesintththon.org को docs.python.org – msw

उत्तर

19

हाँ, ओपी self याद किया है, लेकिन मैं यह भी नहीं जानते कि उन tuples के रूप में तर्क मतलब है और मैं जानबूझकर यह पता लगाने की परेशान नहीं कर रहा हूँ, यह सिर्फ एक बुरा निर्माण है।

Codysehi, के साथ अपने कोड विपरीत करें:

class Adapter: 
    def __init__(self, side1, side2): 
     self.side1 = side1 
     self.side2 = side2 

sideX = ('rca', 'm') 
sideY = ('bnc', 'f') 
x = Adapter(sideX, sideY) 

और देखते हैं कि यह दोनों अधिक पठनीय है, और मैं क्या लगता है कि आप का इरादा है।

+0

धन्यवाद! पाइथन के लिए मेरा परिचय अपेक्षाकृत सुचारू रूप से नहीं चला है: पी यह अब सूचियों के रूप में दो चरों में गुजरने के लिए मुझे अधिक समझ में आता है। – codysehl

+0

मैंने पाइथन को पहली बार टच बिल्डरिंग पाया, और यह मेरे बेल्ट के नीचे दर्जनों भाषाओं के साथ था। उपयोगी नाइटपिक: 'साइडएक्स' एक tuple '()' से जुड़ा हुआ है जो सूची [[] 'के विपरीत अपरिवर्तनीय है जो उत्परिवर्तनीय है। – msw

5

आपका __init__ इस तरह दिखना चाहिए:

def __init__(self,(pType1,pMF1),(pType2,pMF2)): 
13

विधि स्वचालित रूप से पहले तर्क के रूप में एक 'स्वयं' पैरामीटर प्राप्त कॉल, इसलिए __init__ बनाने() देखो जैसे:

def __init__(self, (pType1,pMF1),(pType2,pMF2)): 

यह आमतौर पर अन्य भाषाओं में निहित है, पायथन में यह स्पष्ट किया जाना चाहिए। यह भी ध्यान रखें कि यह वास्तव में उस उदाहरण की विधि को सूचित करने का एक तरीका है, जिसका आपको संबंधित है, आपको इसे 'स्वयं' नहीं कहना है।

+1

से अधिक उपयुक्त पा सकते हैं [क्लासेस] पर पाइथन दस्तावेज़ में आगे बताया गया है (http://docs.python.org/tutorial/classes.html) –

+0

को पहली पंक्ति में '__init__' सही तरीके से प्रदर्शित करने के लिए, आपको इसके चारों ओर बैकटिक्स रखना होगा। अन्यथा डबल अंडरस्कोर इसे बोल्ड बनाता है –

4

ऐसा लगता है कि पाइथन भाषा सीखने वाले सभी को नमस्कार कहता है। पायथन के पहले काटने की तरह।

आपको स्वयं निर्दिष्ट उदाहरणों में उदाहरण के रूप में निर्दिष्ट करना होगा। तो यह होना चाहिए।

def __init__(self, (pType1,pMF1),(pType2,pMF2)): 
संबंधित मुद्दे