Рассмотрим следующий простой пример класса, у которого есть свойство, которое предоставляет измененную версию некоторых внутренних данных при вызове:
class Foo(object): def __init__(self, value, offset=0): self._value = value self.offset = offset @property def value(self): return self._value + self.offset @value.setter def value(self, value): self._value = value
value.setter
отлично работает для обычного присваивания , но, конечно, не работает для составного присваивания:
>>> x = Foo(3, 2) >>> x.value 5 >>> x.value = 2 >>> x.value 4 >>> x.value += 5 >>> x.value 11
Желаемое поведение состоит в том, что x.value + = 5
должно быть эквивалентно x.value = x._value + 5
, в отличие от x.value = x.value + 5
. Есть ли способ добиться этого (с помощью интерфейса свойств) исключительно в классе Foo
?