2017-10-10 4 views
0
class User: 
    num_of_user = 0 
    def __init__(self,name): 
     self.name = name 
     User.num_of_user += 1 

user_1 = User('A') 
user_2 = User('B') 
.... 

class Value(User): 
    def __init__(self,name,value): 
     User.__init__(self, name) 
     self.value = value 

# --> user_1.value = read a new manual input 
# --> user_2.value = read a new manual input 
.... 

Je ne suis pas familiarisé avec la manière de présenter des instances/attributs correctement dans Class. Comment écrire ci-dessus commentaire dans une boucle For?Comment affecter des valeurs aux attributs d'instance de classe dans une boucle

Répondre

1

Ajoutez toutes les instances User_X créées dans List/Array (users/userList) et parcourez-les.

# step by step 
user_1 = User("A") 
user_2 = User("B") 
user_3 = User("C") 

users = [] 
users.append(user_1) 
users.append(user_2) 
users.append(user_3) 

# Better way with less instances 
users = [User("A"), User("B"), User("C")] 

Maintenant, vous pouvez ajouter une itération simplement comme:

for user in users: 
    user.value = <SOME INPUT> 
+0

comment faire users.append() dans une boucle aussi? –

+2

@LiDong 'users = map (Utilisateur, [" A "," B "," C "])' – Adirio

2

Cela fera,

class User: 
    num_of_user = 0 
    def __init__(self,name): 
     self.name = name 
     User.num_of_user += 1 

names = ['A','B','C','D'] 
users = [] 
for name in names: 
    users.append(User(name)) 

for user in users: 
    user.value = 'input from user' 
+0

Pourquoi ajoutez-vous gratuitement des globals au mixage là où ils ne sont même pas nécessaires? Vous avez rendu votre code plus complexe et suggérez d'utiliser une fonctionnalité qui ne devrait être utilisée que lorsque vous savez ce que vous faites. Utilisez une variable temporelle normale ou ajoutez-la directement. – Adirio

+0

Je suis d'accord. J'utilise les globals très soigneusement (c'est pourquoi je l'ai déjà mentionné), mais que faire s'il a besoin de créer beaucoup de variables (des centaines de variables). C'est facile, si vous savez ce que vous faites. –

+0

remplacer les 2 lignes dans la boucle avec 'object_list.appen (User (v))' et vous pouvez maintenant supprimer le 'glo = globals()' et même simplifier la boucle à 'pour v dans Name:' ​​comme vous ne le faites pas utilisez l'énumération plus. De plus, vous ne devriez jamais utiliser la lettre des majuscules pour les noms de variables, vous devriez changer 'Name' en' names' car c'est une liste de noms. Je vais suggérer une modification sur votre message afin que vous puissiez l'accepter. – Adirio