5

python @property に関する設計上の質問です。次の 2 つのオプションに遭遇しました。

オプション1:

class ThisIsMyClass(object):

    @property
    def ClassAttr(self):
        ...

    @ClassAttr.setter
    def ClassAttr(self, value):
        ...

オプション-2:

class ThisIsMyClass(object):

    def set_ClassAttr(self, value):
        ...

    def get_ClassAttr(self):
        ...

    myProperty = property(get_ClassAttr, set_ClassAttr)

質問:

これら2つのオプションを使用して違いがあるかどうか知りたいですか?

もしそうなら、それは私のコードにどのように影響しますか?

4

3 に答える 3

5

それらはまったく同等です。ドキュメントを参照して、自分で確認してください。

http://docs.python.org/2/library/functions.html#property

@ オプションの方が読みやすく (2 つの連続した行のコード)、リファクタリングしやすく (すべての @ デコレータを grep して続行)、覚えやすいように思えます。これは 2 番目の方法のシンタックス シュガーとして意図されたものであり、それに固執することをお勧めします。

何らかの理由で @ 機能 (2.6) をサポートしていない Python バージョンをサポートする必要がある場合は、プロパティ (2 番目のオプション) メソッドに固執する必要があります。

無関係なメモ: アンダースコアで区切られた小文字の単語を使用して名前を付けたメンバー属性を保持することをお勧めします。もちろん、これは好みの問題ですが、Python スタイルの推奨事項 (PEP8) に沿っています。このアドバイスには重要な例外がありますが、できることなら、クラス名には大文字を残してください。

于 2013-11-06T15:33:13.093 に答える
3

唯一の違いは、構文と、2 番目のオプションを使用して他の名前を公開することです。たとえば、obj.set_ClassAttr(value)後者で使用できます。

最初のオプションは、プロパティがデコレータよりも古いため、使用できませんでした。

于 2013-11-06T15:19:51.217 に答える