我想编写一个 Python 的子类,property
它已经有一个设置器,它在设置之前对值进行特定检查。
背景:我有一个具有许多属性的类,这些属性都不能是负数。所以我想将它们全部设置为属性并检查它们是否设置为非负值。但我不想多次编写同一个 setter。
请看下面的例子:
class Body(object):
_mass = 0.
_size = 0.
@nonnegative
def mass(self):
return self._mass
@nonnegative
def size(self):
return self._size
现在我想定义应该从“property”继承的“nonnegative”。我的 ansatz 正在覆盖该__set__
方法,但我被卡住了:
class nonnegative(property):
def __set__(self, obj, value):
if value < 0:
raise ValueError, 'value must not be negative'
### then set the attribute to value, but how?
### how can I know the name of the attribute?
或者也许我应该覆盖fset
?或者setter
?有人可以帮忙吗?