Начинающий Python: AttributeError: объект "list" не имеет атрибута
ошибка говорит:
AttributeError: 'list' object has no attribute 'cost'
Я пытаюсь получить простой расчет прибыли для работы, используя следующий класс для обработки словаря велосипедов:
class Bike(object):
def __init__(self, name, weight, cost):
self.name = name
self.weight = weight
self.cost = cost
bikes = {
# Bike designed for children"
"Trike": ["Trike", 20, 100],
# Bike designed for everyone"
"Kruzer": ["Kruzer", 50, 165]
}
когда я пытаюсь рассчитать прибыль с помощью моего оператора for, я получаю ошибку атрибута.
# Markup of 20% on all sales
margin = .2
# Revenue minus cost after sale
for bike in bikes.values():
profit = bike.cost * margin
во-первых, я не знаю, почему он ссылается на список, и вроде бы все определено, нет?
3 ответов
считаем:
class Bike(object):
def __init__(self, name, weight, cost):
self.name = name
self.weight = weight
self.cost = cost
bikes = {
# Bike designed for children"
"Trike": Bike("Trike", 20, 100), # <--
# Bike designed for everyone"
"Kruzer": Bike("Kruzer", 50, 165), # <--
}
# Markup of 20% on all sales
margin = .2
# Revenue minus cost after sale
for bike in bikes.values():
profit = bike.cost * margin
print(profit)
выход:
33.0 20.0
разница в том, что в bikes
словарь, вы инициализируете значения как списки [...]
. Вместо этого, похоже, что остальная часть вашего кода хочет Bike
экземпляров. Так создайте Bike
случаях: Bike(...)
.
что касается вашей ошибки
AttributeError: 'list' object has no attribute 'cost'
это произойдет, когда вы попытаетесь вызвать .cost
на
вам нужно передать значения dict в Bike
конструктор перед использованием. Или, смотрите namedtuple
-- кажется, больше соответствует тому, что вы пытаетесь сделать.
Это списки, потому что вы вводите их как списки в словаре:
bikes = {
# Bike designed for children"
"Trike": ["Trike", 20, 100],
# Bike designed for everyone"
"Kruzer": ["Kruzer", 50, 165]
}
вы должны использовать велосипед-класса вместо:
bikes = {
# Bike designed for children"
"Trike": Bike("Trike", 20, 100),
# Bike designed for everyone"
"Kruzer": Bike("Kruzer", 50, 165)
}
Это позволит вам получить стоимость велосипедов с велосипедом.стоимость, как вы пытались.
for bike in bikes.values():
profit = bike.cost * margin
print(bike.name + " : " + str(profit))
теперь это будет печатать:
Kruzer : 33.0
Trike : 20.0