Python クラスでは、使用する__setattr__
と、このクラス (または基本クラス) で定義されたプロパティよりも優先されます。次のコードを検討してください。
class Test(object):
def get_x(self):
x = self._x
print "getting x: %s" % x
return x
def set_x(self, val):
print "setting x: %s" % val
self._x = val
x = property(get_x, set_x)
def __getattr__(self, a):
print "getting attr %s" % a
return -1
def __setattr__(self, a, v):
print "setting attr %s" % a
クラスを作成して設定しようとすると、代わりx
に__setattr__
が呼び出されますset_x
。
>>> test = Test()
>>> test.x = 2
setting attr x
>>> print test.x
getting attr x_
getting x: -1
-1
私が達成したいの__setattr__
は、関連するプロパティがない場合にのみ実際のコードが呼び出されることtest.x = 2
ですset_x
。a
「x」がであるかどうかを手動で確認することでこれを簡単に達成できることはわかっていますが__setattr__
、これでは設計が不十分になります。__setattr__
クラスとすべての基本クラスで定義されたすべてのプロパティに対して適切な動作を保証するより賢い方法はありますか?