2017-01-17 5 views
-1

у меня есть текущий код:Python создать п число экземпляров класса

class Stock: 

    def __init__(self,name,price): 

     self.name = name 
     self.price = price 

name='MSFT' 
price=100 
obj1= Stock(name,price) 

Однако это работает только для создания одного экземпляра класса, что, если у меня есть список с сотнями имен, как я создать имена переменных объекта и инициализировать их?

+1

Что вы имеете в виду? Вы можете создать столько экземпляров, которые хотите ... (в пределах ограничений памяти) – Li357

+1

вы не можете динамически создавать имя для объекта, но вы всегда можете иметь список и добавлять к нему новые экземпляры –

+1

@Sarathsp вы можете динамически создавать имена для объектов, но его беспорядочный и неэффективный. – ANVGJSENGRDG

ответ

5

Предполагая, что вы получили список имен и список цен, вы можете использовать zip и список понимание:

names = ['A', 'B', 'C'] 
prices = [100, 200, 300] 
objects = [Stock(name, price) for name, price in zip(names, prices)] 
3

Я предполагаю, что вы имеете в виду это, вы можете использовать exec()

>>> class Stock: 
...  def __init__(self, name, price): 
...    self.name = name 
...    self.price = price 
... 
>>> name = 'MSFT' 
>>> price = 100 
>>> for i in range(10): exec("obj{} = Stock(name, price)".format(i)) 
... 
>>> obj1 
<__main__.Stock object at 0x7ffaf5965e10> 
>>> obj1.name 
'MSFT' 
>>> obj9.price 
100 
>>> obj0.price 
100 
>>> 
+1

дорогой лорд нет !!! –

+0

@ juanpa.arrivillaga Помните, если я спрошу, почему? –

+0

Если вы собираетесь это сделать, это действительно плохая практика - эти объекты должны входить в контейнер, на самом деле, как 'list', но если вы * должны *, то используйте' globals() '. –

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

  • Нет связанных вопросов^_^