在 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'
我正在寻找 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'