web-dev-qa-db-fra.com

Comment créer plusieurs objets de classe avec une boucle en python?

Supposons que vous devez créer 10 objets de classe en python et faire quelque chose avec eux, comme:

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

Comment feriez-vous avec une boucle et affectez une variable à chaque objet (comme obj_1), pour que le code soit plus court? Chaque objet doit être accessible en dehors de la boucle

obj_1.do_sth()
19
alwbtc

Cette question est posée chaque jour dans une certaine variation. La réponse est: gardez vos données hors de vos noms de variables, et c'est le billet de blog obligatoire .

Dans ce cas, pourquoi ne pas dresser une liste d'objs?

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

objs[0].do_sth()
27
RemcoGerlich

vous pouvez utiliser la liste pour la définir.

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

Créer un dictionnaire comme il l'a mentionné, mais dans ce cas, chaque clé a le nom du nom d'objet que vous souhaitez créer. Ensuite, la valeur est définie comme la classe que vous souhaitez instancier, voir par exemple:

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}

Ensuite, vous appelez simplement la clé titulaire et vous aurez toutes les propriétés et méthodes de votre classe à votre disposition.

holder['red'].checkme

sortie:

'awesome red'
5
Jobel

J'espère que c'est ce que vous recherchez.

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()

Sortie:

Hello
1
Tanveer Alam