2014-02-20 5 views
0

Я хочу, чтобы создать экземпляр объекты автоматически, как я объяснил в следующем:Python: как автоматически создать экземпляр объекта?

Class MyClass: 
    def __init__(self,x): 
      self.x = x 

list = ["A","B"] 

Я хочу создать следующий, но автоматически, значит цикл по списку и создать идентичный объект для каждого элемента:

A = MyClass(text) 
B = MyClass(text) 

eg например, не работает:

# this doesn't work but explains more what I need 
for i in list: 
    i = MyClass(text) 

Спасибо вам за помощь!

+2

Не могли бы вы уточнить точный результат, который вы надеетесь достичь? Потому что следующим может быть то, что вы ищете: '[MyClass (текст) для _ в списке]' или что-то в этом направлении. – sean

+0

Аналогично этому вопросу. http://stackoverflow.com/questions/21598872/how-to-create-multiple-class-objects-with-a-loop-in-python/21599140#21599140 –

+0

@sean Я предоставил сенарио, скажем, ввод - это неожиданные имена сотрудников и для каждого сотрудника, которого я требую для обработки данных. поэтому для каждого сотрудника я должен создать класс. – jesy2013

ответ

4

В общем, вы не можете и не должны вставлять вещи в пространство имен, подобное этому. Лучше хранить эти экземпляры в dict или list

Class MyClass: 
    def __init__(self,x): 
      self.x = x 

lst = ["A","B"] # don't use list as an identifier 

myclasses = {k: MyClass(text) for k in lst} 

Теперь ваши экземпляры

myclasses['A'], myclasses['B'] и т.д.

Если вы действительно хотите создать несколько переменных в пространстве имен:

A, B = (MyClass(text) for x in range(2)) 

Обратите внимание, что это означает, что вам необходимо быть явным. Вы не можете получить A, B из файла или ввода пользователя и т. Д.

Не искушайтесь использовать exec, чтобы снять это. Вероятно, это неправильный способ решить вашу проблему. Сообщите нам почему вы думаете, что вам нужно это сделать.

+0

спасибо за ваш ответ. ваш ответ не работает, но я также могу сказать вам, зачем мне это нужно, и мне стало интересно, что такие идеи не кажутся правильными опытными программистами, такими как все вы, которые ответили, означает, что есть еще один способ решить такие проблема, и я собираюсь рассказать о проблеме. поэтому я пытаюсь ввести непредвиденную информацию, такую ​​как «имена сотрудников», и для каждого из них мне нужно сделать некоторый анализ, который требует от меня создания класса для каждого из них, поэтому мне нужно автоматически создавать объекты класса так как я не ожидаю фиксированных имен ввода. – jesy2013

+0

@ jesy2013, именно поэтому вы не должны хранить их в своем локальном пространстве имен. Если имя конфликтует с ключевым словом или встроенным или что-то еще в вашем пространстве имен, вы получите интересные ошибки. Скорее всего, вы должны использовать dict с ключами, являющимися именами сотрудников. –

+0

спасибо, тогда как вы предлагаете мне использовать dict в таком случае? если входные данные являются только именами сотрудников, то что и как мне назначать ключи для каждого сотрудника? – jesy2013

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