Ошибка находится в «сеттере»:
def _set_loader(self, val):
self._loader = <s>self._loader +</s> val
Вот вам это добавление val
к self._loader
, если вы установите его как self.loader = val
,Поэтому, если вы напишите:
self.loader = self.loader-fired
с self.loader
, например, 100
, и сработало 3
, тогда self.loader-fired
будет 97
, а установит self.loader
, таким образом, вы добавите 97
к значению self_loader
.
Сеттер обычно имеет форму:
def _set_loader(self, val):
self._loader = <b>val</b>
Таким образом, ваш код должен выглядеть следующим образом:
class Something(object):
def __init__(self):
self._loader = 100
def _get_loader(self):
return self._loader
def _set_loader(self, val):
self._loader = <b>val</b>
loader = property(_get_loader, _set_loader)
def fire(self):
fired = random.randint(1, 21)
self.loader = self.loader-fired
print("Bullets remaining : {}".format(self.loader))
Потенциальная проблема заключается в том, что если вы продолжите вызывать .fire()
, в конечном итоге _loader
получит значение ниже ноль.Таким образом, вы можете использовать max(0, ...)
здесь, чтобы предотвратить это:
def _set_loader(self, val):
self._loader = <b>max(0,</b> val<b>)</b>
Вы также можете вызвать ошибку в случае, если вы звоните .fire()
, а количество пуль равняется нулю, так как я предполагаю, чтонельзя стрелять без пуль.