3 回答

TA贡献2039条经验 获得超7个赞
只是为那些偶然发现此异常的其他人提供的注释:两个函数必须具有相同的名称。按以下方式命名方法将导致异常:
@property
def x(self): pass
@x.setter
def x_setter(self, value): pass
而是给这两种方法取相同的名称
@property
def x(self): pass
@x.setter
def x(self, value): pass
同样重要的是要注意声明的顺序很重要。必须先在文件中的setter之前定义getter,否则您将获得NameError: name 'x' is not defined

TA贡献1712条经验 获得超3个赞
我想补充一点,当__init__基于此答案从您的类的方法调用设置器时,需要特别注意 :
class testDec(object):
def __init__(self, value):
print 'We are in __init__'
self.x = value # Will call the setter. Note just x here
#self._x = value # Will not call the setter
@property
def x(self):
print 'called getter'
return self._x # Note the _x here
@x.setter
def x(self, value):
print 'called setter'
self._x = value # Note the _x here
t = testDec(17)
print t.x
Output:
We are in __init__
called setter
called getter
17
添加回答
举报