2017-03-14 1 views
-1

Je souhaite additionner l'attribut costsum pour toutes les instances d'un objet.Comment faire la somme des attributs de toutes les instances d'un objet

class ActivityCenter: 

    def __init__(self, costpool, costsum, costdriver, cdunits): 
     self.costpool = costpool 
     self.costsum = costsum 
     self.costdriver = costdriver 
     self.cdunits = cdunits 

cp1 = ActivityCenter("Material Handling", 480000, "Pounds", 160000) 
cp2 = ActivityCenter("Production orders", 90000, "Num of POs", 200) 

# I am looking to add up the costsum values for all instances, similar to: 
costsumtotal = (cp1.__dict__.get("costsum")) + (cp2.__dict__.get("costsum")) 

Jusqu'à présent, je l'ai essayé d'utiliser la somme() avec la compréhension de la manière suivante, en se référant à this solution:

B = [] 
for i in range(10): 
    B.append(ActivityCenter()) 

s = sum(i.costsum for i in B) 

Mais je ne parviens pas à surmonter la TypeError que je manque 4 arguments de position requis .

+0

Le premier bloc de code envoie quatre arguments au constructeur. Le deuxième bloc de code envoie zéro. Êtes-vous surpris que l'un d'eux a tort? Quelle avenue pensez-vous que vous devriez étudier pour le réparer? – TigerhawkT3

+0

Vous rencontrez l'erreur lors de l'initialisation de nouveaux objets d'activité. Votre classe vous oblige à donner 4 paramètres 'costpool, costum, costdriver, cdunits' et vous n'en donnez aucun' B.append (ActivityCenter()) '. Sinon, cela devrait fonctionner. – umutto

Répondre

0

Pour utiliser la fonction intégrée sum en Python pour les variables membres d'objets, vous devez créer une séquence (par exemple, tuple ou liste) des variables membres des objets. L'extrait suivant montre comment créer une liste de variables membres d'objets. Le code que vous avez publié omet le comprehension expression. J'espère que cela sera utile :)

class ActivityCenter: 

    def __init__(self, costpool, costsum, costdriver, cdunits): 
     self.costpool = costpool 
     self.costsum = costsum 
     self.costdriver = costdriver 
     self.cdunits = cdunits 

""" 
Create some objects 

objs = [] 
for i in range(num_obj): 
    objs.append(ActivityCenter(<some value>,<...>,<...>,<...>)) 

Or use objects to make a list 
""" 
cp1 = ActivityCenter("Material Handling", 480000, 160000, "Pounds") 
cp2 = ActivityCenter("Production orders", 90000, 200, "Num of POs") 
cp3 = ActivityCenter("Marketing", 120000, 1000, "Num of events") 

objs = [cp1, cp2, cp3] 

total_cost = sum([obj.costsum for obj in objs]) # List comprehension 
print("Total cost: ", total_cost) 
+0

Il n'y a pas d'explication, donc malheureusement cela ne sera pas utile. Ceci n'est pas un site d'échange de snippets. – TigerhawkT3

+0

@ TigerhawkT3 Merci pour votre aide. Je l'ai fait plus explicatif. –