member variable string gets treated as Tuple in Python

Question:

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?

Asked By: Marco

||

Answers:

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
Answered By: fredtantini

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

Remove them and you’ll get it without a tuple

Answered By: thomas

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.

Answered By: Vivek Sable
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.