4

我刚刚开始使用 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'

有人可以解释在这种情况下翻译是如何工作的吗?

4

1 回答 1

6

你得到它的原因是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)
于 2012-04-30T10:20:30.520 回答