在 python 中获得 setter 状态

Get setter status in python

我正在寻找 return 设置实例变量时的状态。此 return 值将指示该值已设置或该值无效。例如:

class C():
    def __init__(self):
        self._attr = 1

    @property
    def attr(self):
        return self._attr

    @attr.setter
    def attr(self, val):
        if val < 10:
            self._attr = val
            return 'value set'
        else:
            return 'value must be < 10'

status = C().attr = 11 # should return failed
status = C().attr = 9 # should return worked

将 return 值添加到我所有的 setter 会很耗时,而且似乎是一种不好的做法。有没有更好的方法从 setter 获取状态?

我想到的另一个解决方案是编写一个 "setSetter()" 函数调用 attr = val 然后检查是否 attr == val (它像状态变量一样工作)。但是,似乎应该有更好的方法。

此外,如果有更好的方法来构建流程控制,使属性不会设置为无效值,我愿意改变我的策略。

在此先感谢您的帮助!

在 Python and/or 中指示失败以防止代码达到无效状态的标准方法是 raise 一个异常,以表明您遇到了一种情况,您可以' t 继续执行。这不需要您修改 return 类型:

    @attr.setter
    def attr(self, val: int) -> None:
        if val < 10:
            self._attr = val
        else:
            raise ValueError('value must be < 10')
try:
    C().attr = 9  # works
    C().attr = 11 # raises ValueError and goes to nearest matching except
    C().attr = 13 # is never executed
except ValueError as e:
    print(e)      # prints 'value must be < 10'