85
votes

I am currently learning Python with the help of CodeAcademy. My problem may be related to their web application, but my suspicion is I am just wrong on a very fundamental level here.

If you want to follow along I am referring to CodeAcademy.com -> Python -> Classes 6/11

My code looks like this:

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

What is suppossed to happen, is, that every member variable of the object my_car gets printed on screen. I was expecting that like condition, color and model would be treated as a string, but instead get treated as a Tuple.

The output looks like this:

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

Which leads to the validation failing, because CA expects "silver" but the code returns ('silver',).

Where is the error in my code on this?

3
I'm grateful for your question. I teach Python, and the trailing comma issue. This is the first time I have come across a real live example of someone making this mistake! Thanks. - cdarke
Aye, it is very hard, to unlearn everything one does know about other languages. Every so often I write object = new class just because I am used to it. I guess I will be stumbling about syntactical mashups very often the upcoming weeks. - Marco

3 Answers

139
votes

In your __init__, you have:

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

which is how you define a tuple. Change the lines to

    self.model = model
    self.color = color

without the comma:

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

vs

>>> a = 2
>>> a
2
15
votes

You've got a comma after those attributes in your constructor function.

Remove them and you'll get it without a tuple

6
votes

yes, you have to remove comma from instance variables. from self.model = model, to self.model = model

Nice to see, you are using Class variable concept, "condition" is class variable and "self.model", "self.color", "self.mpg" are instance variables.