如何在运行时使用getattr/setattr递增属性?
我有一个类里面有十个不同的计数器。我需要在运行时增加其中一个计数器的值,而增加的方法会告诉我要增加哪个计数器。
我在想有没有比这样做更简单的方法:
def increment(self, name):
"""Increments a counter specified by the 'name' argument."""
setattr(self, name, getattr(self, name) + 1)
- 我并不是特别担心竞争条件之类的问题。
- 不,你不能改变这个函数的调用方式。显然,实际的代码比这个例子要复杂一些。
1 个回答
6
你可以把计数器存放在一个字典里,而不是放在属性里面。
另外,你也可以使用
def increment(self, name):
"""Increments a counter specified by the 'name' argument."""
self.__dict__[name] += 1
这就看你自己觉得哪个方式更“干净”了。