property
設定する前に値を特定のチェックを行うセッターが既に搭載されているPythonのサブクラスを書きたいと思います。
背景: 私は、すべてが負であってはならない多くの属性を持つクラスを持っています。したがって、それらをすべてプロパティにして、負でない値が設定されているかどうかを確認したいと思います。しかし、同じセッターを複数回書きたくありません。
次の例を見てください。
class Body(object):
_mass = 0.
_size = 0.
@nonnegative
def mass(self):
return self._mass
@nonnegative
def size(self):
return self._size
次に、「プロパティ」から継承する「非負」を定義したいと思います。私の 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
?誰か助けてくれませんか?