2015-09-22 56 views
1

是否有增加多個類實例的屬性的方法? 說我有一個包含每個人多少錢,有一本字典:增加多個類實例的屬性

money = {'John':20, 'Mary':5, 'Robert':10} 

我可以通過做增量全部三個人的價值觀:

for person, value in money.items(): 
    money[person] += 10 

這給:

{'Mary': 15, 'John': 30, 'Robert': 20} 

類怎麼樣?

class person: 
    def __init__(self, name, money): 
     self.name = name 
     self.money = money 

Mary = person("Mary",5) 
Robert = person("Robert",10) 
John = person("John",20) 

我需要做什麼來增加所有類實例的貨幣值?

的結果應該是:

Mary.money == 15 
Robert.money == 20 
John.money == 30 

回答

2
people = (Mary, Robert, John) 

for person in people: 
    person.money += 10 

編輯:另外適當命名的類(Person)!檢出python's conventions

0

你或許應該把所有的情況下,在一個列表,並使用了。

for person in people: 
    person.money += 10 

也有可能獲得類person的每個實例,並增加各.money爲所有這些,但它不是很「安全」(例如,你可以有這個類的某些情況下,你不希望改變)和「pythonic」。如果您仍然想這樣做,你可以做這樣的:

import gc 

for obj in gc.get_objects(): 
    if isinstance(obj, person): 
     obj.money += 1 
0

可以使類支持保存所創建的任何實例,然後使用它:

class Person: 
    people = [] # <-- creates a list 
    def __init__(self, name, money): 
     self.name = name 
     self.money = money 
     person.people.append(self) # <-- save the instance into the list 

    def __repr__(self): 
     return self.name + ' ' + str(self.money) # for printing purpose 



Mary = Person("Mary",5) 
Robert = Person("Robert",10) 
John = Person("John",20) 

for p in Person.people: 
    p.money += 10 
    print p 

輸出

Mary 15 
Robert 20 
John 30 
+0

Downvoting沒有註釋的是跛腳... – alfasin

相關問題