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 に答える