1

Python 組み込み関数property()を使用する好ましい方法はどれですか? デコレーターとして、または変数に保存しますか?

property()変数に保存する例を次に示しますcolor

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    def get_color(self):
        return self._color

    def set_color(self, color):
        self._color = color

    def del_color(self):
        del self._color
    color = property(get_color, set_color, del_color)

これは同じ例ですが、代わりにデコレータを使用しています。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    @property
    def color(self):
        return self._color

    @color.setter
    def color(self, color):
        self._color = color

    @color.deleter
    def color(self):
        del self._color

読み取り専用プロパティにデコレータ構文を使用するのが好きな人がいることがわかりました。例えば。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    @property
    def color(self):
        return self._color

ただし、変数に保存するときにも同じ機能を実現できます。

class Train(object):
    def __init__(self, color='black'):
        self._color = color

    def get_color(self):
        return self._color
    color = property(get_color)

PEP20 が宣言しているため、同じ機能の 2 つの方法で混乱します。

それを行う明白な方法が 1 つ (できれば 1 つだけ) ある必要があります。

4

1 に答える 1

3

機能的には、これを行う 2 つの方法は同等です。デコレータの構文は単なる構文糖衣です。

@some_decorator
def some_func():
    ...

...と同等です...

def some_func():
    ....
some_func = some_decorator(some_func)

デコレータ構文はコードをより簡潔にし (非デコレータ構文は、「some_func」を 3 回入力する必要があることを意味します!)、意図がより明確になるため、デコレータ構文を使用することをお勧めします。

于 2012-12-20T23:28:31.260 に答える