2014-12-26 19 views
19

Obecnie uczę się Pythona przy pomocy CodeAcademy. Mój problem może być związany z ich aplikacją internetową, ale podejrzewam, że jestem po prostu w błędzie na bardzo podstawowym poziomie.zmienna ciągu członków zostaje potraktowana jako Tuple w języku Python

Jeśli chcesz podążać Mam na myśli CodeAcademy.com -> Python -> Klasy 6/11

Mój kod wygląda następująco:

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 

Co suppossed się stało, jest , że każda zmienna składowa obiektu my_car zostanie wydrukowana na ekranie. Spodziewałem się, że tak jak condition, color i model będzie traktowane jako ciąg, ale zamiast tego traktuje się jako Tuple.

Wyjście wygląda następująco:

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

Która prowadzi do upadającego walidacji, ponieważ CA oczekuje „srebro”, ale kod zwraca ('silver',).

Gdzie jest błąd w moim kodzie na ten temat?

+2

Jestem wdzięczny za twoje pytanie. Uczę Pythona i kończę przecinkiem. Po raz pierwszy natknąłem się na prawdziwy przykład kogoś, kto popełnił ten błąd! Dzięki. – cdarke

+0

Tak, bardzo trudno jest oduczyć się wszystkiego, co się wie o innych językach. Co jakiś czas piszę "object = new class" tylko dlatego, że jestem do tego przyzwyczajony. Sądzę, że w nadchodzących tygodniach będę często natknął się na syntaktyczne mashupy. – Marco

Odpowiedz

28

W swojej __init__, masz:

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

który jest jak zdefiniować krotki. Zmień linie

self.model = model 
    self.color = color 

bez przecinka:

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

vs

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

To było to - po prostu zaginęło w tłumaczeniu gdzieś pomiędzy C# i Pythonem. Twoje zdrowie. Akceptacja nastąpi zaraz po podniesieniu blokady. – Marco

5

Masz przecinek po tych atrybutów w swojej funkcji konstruktora.

Usuń je i dostaniesz go bez krotki

+1

Nie są to żadne własności, lecz jedynie atrybuty. – glglgl

1

Tak, trzeba usunąć przecinek z zmiennych instancji. from self.model = model, to self.model = model

Miło zobaczyć, używasz klasy zmiennej koncepcję, "condition" to zmienna klasa i "self.model", "self.color", "self.mpg" są zmienne instancji.

Powiązane problemy