2015-05-06 10 views
8

मैं की तरह वेक्टर प्राप्त करना चाहते हैं लेता है: v:[1.0, 2.0, 3.0]सूची() अधिकतम 1 तर्क (3 दिए गए)

यहाँ मेरी कोड है:

class VECTOR(list) : 
    def _init_ (self,x=0.0,y=0.0,z=0.0,vec=[]) : 
      list._init_(self,[float(x),float(y),float(z)]) 
      if vec : 
       for i in [0,1,2] : 
        self[i] = vec[i] 

लेकिन जब मैं टाइप किया: a = VECTOR(1,2,3) यह गलत हो गया इस तरह:

TypeError: list() takes at most 1 argument (3 given)

मैं इसे कैसे भंग कर सकता हूं?

+1

FWIW, अंतर्निहित प्रकारों से प्राप्त नहीं है। संरचना »विरासत यहाँ। – Veedrac

उत्तर

23

समस्या यह है कि आपने निर्माता के नाम की गलत वर्तनी की है। _init___init__ के साथ बदलें।

class VECTOR(list) : 
    def __init__ (self,x=0.0,y=0.0,z=0.0,vec=[]) : 
      list.__init__(self,[float(x),float(y),float(z)]) 
      if vec : 
       for i in [0,1,2] : 
        self[i] = vec[i] 

a = VECTOR(1,2,3) 
print(a) 

और प्रदर्शन करती है और यह काम करता है:

    आप
  • :

    % python test.py 
    [1.0, 2.0, 3.0] 
    

    मैं भी करना चाहते हैं तो आपको कुछ अतिरिक्त टिप्पणियाँ देने के लिए

    यहाँ तय कोड है PEP8 के अनुसार कोडिंग शैली को ठीक करना चाहिए (यह एक दस्तावेज़ है जो प्रत्येक पायथन डेवलपर को पूरी तरह से पढ़ना चाहिए);

  • आप शायद कुछ और पाइथोनिक (धन्यवाद बेंजामिन) कर सकते हैं;
  • विरासत ऐसा करने का एकमात्र तरीका नहीं है, आप सूची को स्टोर करने और प्रासंगिक तरीकों को परिभाषित करने के लिए एक विशेषता का भी उपयोग कर सकते हैं (धन्यवाद वीड्राक);
  • आप super का उपयोग भी कर सकते हैं (पैडियग का जवाब देखें);

संपादित करें ध्यान दें: मैं इस समाधान प्रासंगिक सलाह देता है टिप्पणियों में पाया करने के लिए जोड़ दिया है।

+9

यह सही जवाब है, लोग! '__init__' की वर्तनी को ठीक करने से आपको एक कक्षा मिलती है जो वास्तव में 3 अलग-अलग तर्क स्वीकार करता है। –

+0

@MartijnPieters बहुत सच है। – Maroun

+0

धन्यवाद @MartijnPieters, मुझे समझ में नहीं आता क्यों 2 लोगों ने बिना किसी कारण के डाउनवोट का फैसला किया। जानकारी के लिए, अगर मैं असहमत हूं तो भी मैंने अन्य उत्तरों को कम मत दिया है। –

-2

संपादित करें यदि आप super(VECTOR, list).__init__() का उपयोग करके कॉल करते हैं तो आपको स्वयं को पास करने की आवश्यकता नहीं है। आपको सूची के रूप में 1,2,3 पास करने की आवश्यकता है [1,2,3]

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