在 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
。我知道我可以通过手动检查 if a
is " x " is来轻松实现这一点__setattr__
,但这会使设计变得糟糕。有没有更聪明的方法来确保__setattr__
类和所有基类中定义的每个属性的正确行为?