2014-12-26 11 views
19

Attualmente sto imparando Python con l'aiuto di CodeAcademy. Il mio problema potrebbe essere correlato alla loro applicazione web, ma il mio sospetto è che ho sbagliato solo a un livello molto fondamentale qui.membro variabile stringa viene trattata come Tupla in Python

Se si vuole seguire mi riferisco a CodeAcademy.com -> Python -> Corsi 6/11

Il mio codice aspetto:

class Car(object): 
    condition = "new" 
    def __init__(self, model, color, mpg): 
     self.model = model, 
     self.color = color, 
     self.mpg = mpg 

my_car = Car("DeLorean", "silver", 88) 
print my_car.model 
print my_car.color 
print my_car.mpg 
print my_car.condition 

Ciò che è suppossed accada, è , che ogni variabile membro dell'oggetto my_car viene stampata sullo schermo. Mi aspettavo che come condition, color e model venissero trattati come una stringa, ma venissero invece trattati come Tuple.

L'output è simile al seguente:

('DeLorean',) #Tuple 
('silver',) #Tuple 
88 
new #String 
None 

che porta alla mancanza di convalida, perché CA si aspetta "argento", ma il codice restituisce ('silver',).

Dove si trova l'errore nel mio codice?

+2

Sono grato per la tua domanda. Insegno Python e il problema della virgola finale. Questa è la prima volta che mi imbatto in un vero esempio di qualcuno che commette questo errore! Grazie. – cdarke

+0

Sì, è molto difficile disimparare tutto ciò che si conosce sulle altre lingue. Ogni tanto scrivo 'object = new class' solo perché mi sono abituato. Immagino che incapperò nei mashup sintattici molto spesso nelle prossime settimane. – Marco

risposta

28

Nella tua __init__, si ha:

self.model = model, 
    self.color = color, 

che è come si definisce una tupla. Modificare le linee per

self.model = model 
    self.color = color 

senza la virgola:

>>> a = 2, 
>>> a 
(2,) 

vs

>>> a = 2 
>>> a 
2 
+0

Questo era - semplicemente perso nella traduzione da qualche parte tra C# e Python. Saluti. Accetta seguirà non appena la serratura è stata sollevata. – Marco

5

Hai una virgola dopo questi attributi nella vostra funzione di costruzione.

rimuoverli e si otterrà senza una tupla

+1

Queste non sono proprietà, ma semplici attributi. – glglgl

1

sì, è necessario rimuovere virgola da variabili di istanza. from self.model = model, to self.model = model

bello da vedere, che si sta utilizzando Classe concetto variabile, "condition" è variabile di classe e "self.model", "self.color", "self.mpg" sono variabili di istanza.

Problemi correlati