在python中获取setter状态

问题描述 投票:0回答:1

我希望在设置一个实例变量时返回一个状态。这个返回值要么表明该值被设置,要么表明该值无效。例如,我希望在设置变量时返回一个状态。

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

给我所有的设置器添加返回值会很耗时 而且似乎是不好的做法。有没有更好的方法从设置器中获取状态?

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

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

先谢谢你的帮助

python setter
1个回答
3
投票

在Python中指示失败或防止代码达到无效状态的标准方法是 raise 异常来表示你遇到了无法继续执行的情况。 这不需要你修改返回类型。

    @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'
© www.soinside.com 2019 - 2024. All rights reserved.