这是我所做的事情的一部分:
class Something(object):
def __init__(self):
self._loader = 100
def _get_loader(self):
return self._loader
def _set_loader(self, val):
self._loader = self._loader+val
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))
M = Something()
M.fire()
fire方法中的self.loader属性未按我的要求进行更新。它不会执行加载程序触发的操作,而是执行加载程序操作。我想减去发射值的加载程序,但它不是我想要的。每当我调用fire()时,它将显示一个递增的值
答案 0 :(得分:0)
错误位于“设置者”:
def _set_loader(self, val):
self._loader = self._loader + val
在此将val
添加到self._loader
中,假设您将其设置为self.loader = val
。因此,如果您写:
self.loader = self.loader-fired
以self.loader
为例,例如100
,并发射3
,然后self.loader-fired
为97
,并通过设置 {{ 1}},您将在self.loader
值中添加97
。
二传手通常具有以下形状:
self_loader
因此您的代码应如下所示:
def _set_loader(self, val):
self._loader = val
此处的一个潜在问题是,如果您继续调用class Something(object):
def __init__(self):
self._loader = 100
def _get_loader(self):
return self._loader
def _set_loader(self, val):
self._loader = val
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 = max(0, val)
并且子弹数为零,您可能还想提出一个错误,因为我认为没有子弹就无法射击。