Строка переменной-члена обрабатывается как Tuple в Python
В настоящее время я изучаю Python с помощью CodeAcademy. Моя проблема может быть связана с их веб-приложением, но мое подозрение в том, что я просто ошибаюсь на очень фундаментальном уровне.
Если вы хотите следовать, я имею в виду CodeAcademy.com → Python → Classes 6/11
Мой код выглядит следующим образом:
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
Предполагается, что произойдет, что каждая членная переменная объекта my_car
печатается на экране. Я ожидал, что как condition
, color
и model
будут обрабатываться как строка, но вместо этого обрабатываются как Tuple
.
Результат выглядит следующим образом:
('DeLorean',) #Tuple
('silver',) #Tuple
88
new #String
None
Это приводит к сбою проверки, потому что CA ожидает "серебро", но код возвращает ('silver',)
.
Где ошибка в моем коде?
Ответы
Ответ 1
В вашем __init__
у вас есть:
self.model = model,
self.color = color,
как вы определяете кортеж. Измените строки на
self.model = model
self.color = color
без запятой:
>>> a = 2,
>>> a
(2,)
против
>>> a = 2
>>> a
2
Ответ 2
У вас есть запятая после этих атрибутов в вашей конструкторской функции.
Удалите их, и вы получите его без кортежа
Ответ 3
да, вам нужно удалить запятую из переменных экземпляра. from self.model = model, to self.model = model
Приятно видеть, что вы используете концепцию Class variable,
"condition
" - это переменная класса, а "self.model
", "self.color
", "self.mpg
" - это переменные экземпляра.