如何在运行时使用getattr/setattr递增属性?

7 投票
1 回答
1834 浏览
提问于 2025-04-16 13:36

我有一个类里面有十个不同的计数器。我需要在运行时增加其中一个计数器的值,而增加的方法会告诉我要增加哪个计数器。

我在想有没有比这样做更简单的方法:

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

这就看你自己觉得哪个方式更“干净”了。

撰写回答