我希望在设置一个实例变量时返回一个状态。这个返回值要么表明该值被设置,要么表明该值无效。例如,我希望在设置变量时返回一个状态。
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中指示失败或防止代码达到无效状态的标准方法是 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'