2016-11-28 4 views
-1

Мне интересно, существует ли «стандартный» способ динамического запуска нескольких экземпляров класса и их получения?Создайте несколько классов и извлеките их

В приведенном ниже кодере появляются 10 велосипедов со случайными ценами и цветами, мне интересно, как бы я их перезвонил? Я играл с добавлением в список, но возвращаемые элементы - это строки.

bikes = [] 

class Bike: 

    style = "" 
    price = 0 
    colour = "" 

    def __init__(self, style, price, colour): 
     self.style = style 
     self.price = price 
     self.colour = colour 
     self.description = "a {0} {2} worth £{1}".format(self.colour, self.price, self.style) 

    def print_details(self): 
     print("description: {0}".format(self.description)) 

for b in range(10): 
    price = random.choice(random_prices) 
    colour = random.choice(random_colours) 
    bike = "bike" + str(b) 
    bike = Bike('bike', price, colour) 
    bikes.append(bike) 

for i in bikes: 
    print_details(i) 


Traceback (most recent call last): 
print("description: {0}".format(self.description)) 
AttributeError: 'str' object has no attribute 'description' 
+1

Что такое 'bike =" bike "+ str (b)'? Он сразу заменяется *. Где ваша попытка добавить экземпляры в список, что именно вы должны * делать? – jonrsharpe

+1

Вы можете создать их, используя понимание списка и перебрать этот список lis так: 'bikes = [Bike ('bike', random.choice (random_prices), random.choice (random_colours)) для _ в xrange (10)]' – Erik

+0

@jonrsharpe Мне не удалось отправить снимок экрана с кодом, но я получил 'str объект не имеет атрибута' из traceback. 'bike =" bike "+ str (b)' была просто моей попыткой исправить ошибку. Код был обновлен, чтобы включить класс, и моя попытка добавить элементы в список – JONAS402

ответ

1

Каждый раз, когда вы создаете класс (или любые данные), его нужно где-то указывать. Если это не так, вы можете считать его потерянным.

Если вам нужно создать набор классов, то коллекция, вероятно, хороший способ для их хранения:

bikes = [] 
for b in range(10): 
    price = random.choice(random_prices) 
    colour = random.choice(random_colours) 
    bike = "bike" + str(b) 
    bike = Bike('bike', price, colour) 
    bikes.append(bike) 

на основе обновленной вопрос, я считаю, что проблема заключается в том, как вам звонит print_details. Поскольку это член класса, его следует называть следующим образом:

for i in bikes: 
    i.print_details() 
+0

Код обновлен, это было мое первоначальное приложение, но я не смог назвать их из функциональности списка. Они вернутся как строки – JONAS402

+0

@ JONAS402 Обновлено. – Ouroborus

+0

Элемент по-прежнему является строкой, я получаю 'AttributeError: 'str' объект не имеет атрибута 'print_details'' – JONAS402

Смежные вопросы