Как создать несколько объектов класса с циклом в python?

Предположим, вам нужно создать 10 объектов класса в 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()

4 ответов


этот вопрос задается каждый день в некоторых вариациях. Ответ: держите свои данные вне имен переменных и это обязательное сообщение в блоге.

в таком случае, почему бы не сделать список файлов?

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

objs[0].do_sth()

вы можете использовать list для его определения.

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

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

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'

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

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