这是我所做的一部分:
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() 时,它都会显示一个递增的值
最佳答案
错误位于“setter”处:
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()
并且子弹数量为零,您可能还想引发错误,因为我假设您无法在没有子弹的情况下开火。
关于python - 无法更新 python 类中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52909166/