I love Pythonの@property
デコレートシステム。 aClassObect.attribute
に電話するときにカスタムコードを実行できることが大好きです。特に、属性を設定しているときにデータを検証する場合。しかし、存在しない属性を設定しようとしたときにカスタムコードを実行する方法は、私が欲しいものの、見つけられないものです。クラス内の未定義/未実装属性のPython "catch all"メソッド
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
、私はクラスC
のインスタンスであるmyObj
を、持っている、と私はmyObject.x = 42
を呼び出す場合、それが最適です適切なセッターを、実行します:たとえば、私は次のクラスを持っていると言いますデータの検証。しかし、これは誰かがmyOjbect.b = 47
を呼び出すのを止めず、b
という新しい属性をうれしく作成します。新しい属性を設定するときに特別なコードを実行する方法はありますか?私は "エラー、この属性が存在しない"のようなものを言うためにエラーを発生させる能力を持っていました。
私はデータベースのAPIとして機能するクラスを持っています。各インスタンスはエントリを表します。データベースのフィールドを表すオブジェクトの属性を変更した後、 'object.save()'を呼び出してDBを更新します。実際にはDBに存在しないため、フィールドを静かにドロップするのではなく、むしろエラーを発生させたいと思います。 –