我刚刚开始使用Python,所以如果我错过了一些明显的东西,请耐心等待。我已经阅读了有关装饰器以及它们如何工作的内容,我正在尝试理解它是如何被翻译的:
class SomeObject(object):
@property
def test(self):
return "some value"
@test.setter
def test(self, value):
print(value)
根据我的阅读,这应该变成:
class SomeObject(object):
def test(self):
return "some value"
test = property(test)
def test(self, value):
print(value)
test = test.setter(test)
然而,当我尝试这个时,我得到了
AttributeError: 'function' object has no attribute 'setter'
有人可以解释翻译在这种情况下的工作原理吗?
答案 0 :(得分:7)
您获得AttributeError
的原因是def test
在类的范围内重新定义test
。类中的函数定义绝不是特殊的。
你的例子会像这样工作
class SomeObject(object):
def get_test(self):
return "some value"
def set_test(self, value):
print(value)
test = property(get_test)
test = test.setter(set_test)
# OR
test = property(get_test, set_test)