使用eval设置未知属性

4 python eval

我有一个User类,里面有多个属性,我也有User类的addPoint方法,允许用户将点输入到它的任何属性中.但是,最多可以有500个属性,每个人都可以拥有不同的属性等等.因此,使用"if: - elif:"对每个属性进行编码会很麻烦.现在这就是我尝试做的事情,让它变得更容易和更清洁:

class User:
    def __init__(self):
        self.health = 0
        self.speed = 0

    def addPoint(self, property, amount):
        eval("self."+property) = eval("self."+property) + amount
Run Code Online (Sandbox Code Playgroud)

而现在,当我做fe.

u = User()
u.addPoint("health", 5)
Run Code Online (Sandbox Code Playgroud)

我希望它能做到这一点:self.health = self.health + 5那就是我用过的东西eval().但是,Python只是给我错误:can't assign to function call.我不是试图分配eval()函数调用本身,我正在尝试分配返回的值eval(),所以我怎么能以最简单的方式做到这一点?

Mar*_*ers 11

不要使用eval(),使用setattr()getattr()代替:

setattr(self, property, getattr(self, property) + amount)
Run Code Online (Sandbox Code Playgroud)