python - 无法更新 python 类中的属性

标签 python class object

这是我所做的一部分:

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

这里添加 valself._loader,假设您将其设置为 self.loader = val。所以如果你写:

self.loader = self.loader-fired

self.loader 为例 100,并触发 3,则 self.loader-fired97,并通过设置 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/

相关文章:

python - 递归满足条件时返回值

python - 正则表达式匹配 - Python - 任意数量的字符

python - 安装 Coral Edge TPU 软件出现 "ModuleNotFoundError: No module named ' pycoral.adapters'"错误

c++ - 输入信息的员工类C++。

python - QTableWidget 动态行 w/QComboBox

python - 如何从其中引用类(如递归函数)

Java:构建成功但输出为 "user_package.Point@68e26d2e"

php - 似乎无法让 class_exists 工作

javascript - 将信息从表单值推送到对象不起作用

javascript - 如何将这个对象转换为数组?