Просто чтобы прояснить: вы знаете, что можете просто набрать
a.foo += 2
Если да, но вам нужен другой метод:
В Python уже есть внутренние функции, которые точно выполняют что вы пытаетесь достичь.Методы называются setattr
и getattr
.Подробнее о них здесь .А сейчас, как вы можете их использовать:
class A:
b = 3
a = A()
setattr(a, 'b', 5)
print(a.b) # 5
print(getattr(a, 'b')) # 5
setattr(a, 'b', getattr(a, 'b') + 5)
print(a.b) # 10
Таким образом, вы можете реализовать метод, который увеличивает атрибут, например так:
class A:
def incr_attr(self, attr_name, amount):
setattr(self, attr_name, getattr(self, attr_name) + amount)
Или, что еще более удобно:
def incr_attrs(self, **attr_map):
for attr_name, amount in attr_map.items():
setattr(self, attr_name, getattr(self, attr_name) + amount)
Так что вы можете набрать
A.incr_attr(stealth=3, money=10)