增加多类实例的属性

时间:2015-09-22 02:03:00

标签: python

有没有办法增加多个类实例的属性? 假设我有一本字典,其中包含每个人有多少钱:

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

3 个答案:

答案 0 :(得分:2)

people = (Mary, Robert, John)

for person in people:
    person.money += 10

编辑:同时正确命名您的班级(Person)!查看python's conventions

答案 1 :(得分:0)

您应该将所有实例放在一个列表中并使用for。

for person in people:
    person.money += 10

它也可以获取课程person的每个实例,并为所有这些实例增加.money,但它不是很安全&#34 ; (例如,你可以有一些你不想改变的课程实例)和#34; pythonic"。如果您仍想这样做,可以这样做:

import gc

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

答案 2 :(得分: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