在
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.我知道我可以通过手动检查是否“x”是__setattr__来实现这一点,但这样做会造成糟糕的设计.有没有更聪明的方法确保在__setattr__中为类和所有基类中定义的每个属性的适当行为?