2015-05-06 10 views
8

Voglio ottenere il vettore come: v:[1.0, 2.0, 3.0]lista() batte al massimo 1 argomento (3 dato)

Ecco il mio codice:

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] 

Ma quando ho digitato: a = VECTOR(1,2,3) è andata male così:

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

Come posso dissolverlo?

+1

FWIW, non ereditare dai tipi incorporati. Composizione »eredità qui. – Veedrac

risposta

23

Il problema è che hai sbagliato a digitare il nome del costruttore. Sostituire _init_ con __init__.

Ecco il codice fisso:

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) 

E la dimostrazione che funziona:

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

Vorrei anche per darvi un paio di commenti aggiuntivi:

  • voi dovrebbe risolvere lo stile di codifica secondo PEP8 (questo è un documento che ogni sviluppatore Python dovrebbe leggere interamente);
  • probabilmente puoi fare qualcosa di più Pythonic (grazie Benjamin);
  • l'ereditarietà non è l'unico modo per farlo, è anche possibile utilizzare un attributo per memorizzare l'elenco e definire i metodi rilevanti (grazie Veedrac);
  • potresti anche usare super (vedi la risposta di paddyg);

modifica nota: ho aggiunto a questa soluzione del relativo consiglia trovato nei commenti.

+9

Questa è la risposta corretta, gente! Correggere l'ortografia di '__init__' fornisce una classe che accetta in realtà 3 argomenti separati. –

+0

@MartijnPieters molto vero. – Maroun

+0

Grazie a @MartijnPieters, non capisco perché 2 persone hanno deciso di downvotare senza alcun motivo. Per informazione, non ho votato le altre risposte, anche se non sono d'accordo. –

-2

MODIFICA se si chiama utilizzando super(VECTOR, list).__init__() non è necessario passare autonomamente. Inoltre è necessario passare 1,2,3 come elenco [1,2,3]

Problemi correlati