2014-02-06 2 views
9

Предположим, что вы должны создать 10 объектов класса в Python, и сделать что-то с ними, как:Как создать несколько объектов класса с помощью цикла в python?

obj_1 = MyClass() 
other_object.add(obj_1) 
obj_2 = MyClass() 
other_object.add(obj_2) 
. 
. 
. 
obj_10 = MyClass() 
other_object.add(obj_10) 

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

obj_1.do_sth() 
+0

Обязательный указатель: http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html –

ответ

17

Этот вопрос задает каждый день в каком-либо варианте. Ответ: сохранить данные из ваших имен переменных и this is the obligatory blog post.

В этом случае, почему бы не составить список объектов?

objs = [MyClass() for i in range(10)] 
for obj in objs: 
    other_object.add(obj) 

objs[0].do_sth() 
+0

Что делать, если я хочу, чтобы назначить общие имена переменных? например «obj_% s»% s – alwbtc

+0

Затем используйте словарь вместо списка. Ваши данные имеют некоторую структуру (например, у вас есть ключи, относящиеся к значениям, или просто список значений и т. Д.), И выбранные вами структуры данных Python должны отражать это. – RemcoGerlich

3

Вы можете использовать его, чтобы определить его.

objs = list() 
for i in range(10): 
    objs.append(MyClass()) 
1

Надеюсь, это то, что вы ищете.

class Try: 
    def do_somthing(self): 
     print 'Hello' 

if __name__ == '__main__': 
    obj_list = [] 
    for obj in range(10): 
     obj = Try() 
     obj_list.append(obj) 

    obj_list[0].do_somthing() 

Выход:

Hello 
+0

Спасибо за редактирование вывода. @ falsetru –

+0

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

+0

Да, я получаю вашу точку. Я обновил свой пример, пожалуйста, ознакомьтесь с этим. Здесь я добавил объекты в список, а затем вы можете использовать объект за пределами цикла. Извините, но мое решение ничем не отличается от других. –

0

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

class MyClass: 
    def __init__(self, name): 
     self.name = name 
     self.checkme = 'awesome {}'.format(self.name) 
... 

instanceNames = ['red', 'green', 'blue'] 

# Here you use the dictionary 
holder = {name: MyClass(name=name) for name in instanceNames} 

Тогда вы просто называете ключ держателя, и вы будете иметь все свойства и методы вашего класса, доступных для вас.

holder['red'].checkme 

выход:

'awesome red' 
+0

У вас есть опечатка: 'seld.checkme =' должно быть 'self.checkme =' – BoKKeR

+0

Спасибо! Типо исчезло! – Jobel

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