@health.setter
def health1(self):
self.__health -= self.damage
у сеттера имя должно совпадать с именем геттера, и должен быть второй параметр, через который придет новое значение при присваивании через test.health = new_health
. Т.е. должно быть так:
@health.setter
def health(self, value):
self.__health = value
Сеттеры предназначены именно для установки нового значения, они вызываются при присваивании нового значения по их имени, а не просто при их "упоминании" (как у вас в коде print(test.health1)
).
Если нужно выполнить действие, а не передать новое значение, то вам нужен просто обычный метод, а не проперти. Например, ниже в коде я добавил метод hit_myself
, который уменьшает значение health
на значение damage
:
class User:
def __init__(self):
self.__health = 100
self.__damage = 10
@property
def health(self):
return self.__health
@health.setter
def health(self, value):
self.__health = value
@property
def damage(self):
return self.__damage
def hit_myself(self):
self.health -= self.damage
test = User()
print(test.health)
test.hit_myself()
print(test.health)
Вывод:
100
90