如何使用方法更改对象的属性?

时间:2016-01-14 23:12:25

标签: python

我有这个代码可以存储一个人的姓名,年龄和资金。我正在尝试编写一种可以采用" age"或"资金"以及数字,并按该数字增加给定属性。

class Actor:
    def __init__(self, name, age, funds):
        self.name
        self.age = age
        self.funds = funds

    def increase_age(self, increase_amount=1):
        self.age = self.age + increase_amount

    def increase_attrib(self, attrib, increase_amount=1):
        self.attrib = self.attrib + increase_amount

a = Actor("Andrea", 32, 10000)

a.increase_age()运行正常:调用它会将Andrea的年龄增加到33,就像预期的那样。但是,a.increase_attrib("age")会出错,说AttributeError: 'Actor' object has no attribute 'attrib'a.increase_attrib("funds")给出了类似的结果。

如果我只说a.increase_attrib(age)(没有引号),我会得到一个NameError,这就是我的预期。

据我了解,将参数"age"提供给increase_attrib()应该意味着提到的attrib变为age,以便increase_attrib()引用self.age而不是self.attrib。显然,我错了。

现在,我可以使用increase_age()代替,但是我必须为年龄和资金制定不同的方法,一旦我将其他功能添加到Actor,就会有更多方法,例如地点,性别和国籍。

我需要做什么才能将属性名称传递给方法并让它更改该属性?

1 个答案:

答案 0 :(得分:3)

您正在寻找setattr

setattr(obj, 'foo', 42)

相同
obj.foo = 42

所以对你的例子来说:

def increase_attrib(self, attrib, increase_amount=1):
    setattr(self, attrib, getattr(self, attrib, 0) + increase_amount)