2017-08-24 2 views
-3

に適用されるプロパティ属性で装飾された機能があります。@propertyは、いくつかのpythonモジュールのグローバル(MODUL)機能

@property 
def _Foo_bar(self): 

上記の宣言は何を意味するのでしょうか?アンダースコア '_'は何かを意味しますか?

+0

StackOverflowでこれを調べるよりも、Pythonのチュートリアル(またはユーザマニュアル)を見つけるのが良いかもしれません。 – jochen

+0

@jochenどのクラスの外でも定義された関数に '@property'を適用することについては何も言いません –

答えて

0

投稿する前に質問を調査したように見えないため、投票が停止しています。あなたは@propertyデコレータのドキュメントをここに表示することができます:python decorator docs

質問に答えるには、通常@propertyがクラスプロパティに使用されます。

# this should work in py2 and py3 
class Foo: 
    def __init__(self): 
     self._a = None 

    @property 
    def a(self): 
     return self._a 

    @a.setter 
    def a(self, val): 
     self._a = val 

if __name__ == "__main__": 
    foo = Foo() 
    foo.a = "some value" 
    print(foo.a) 

self._a_は、コードに何もするが、代わりに、それは隠されたと考えていません。つまり、直接アクセスする必要はありません。

foo._a = "some value" 

のようにすることもできますが、コードの意図を迂回している可能性があります。あなたはその変数への読み取り専用のアクセス権を持っています(@a.setterメソッドなしの上記のコード)。

0

プロパティはディスクリプタオブジェクトです。ここで
はPythonのドキュメント一般に

から簡単に説明し、記述は「結合挙動」とオブジェクト属性、その属性にアクセス記述子プロトコルのメソッドによって上書きされたものです。これらのメソッドはです。()、セット()、()です。これらのメソッドのいずれかがオブジェクトに対して定義されている場合、それは記述子であると言われます。

属性アクセスのデフォルトの動作は、オブジェクトの辞書から属性を取得、設定、または削除することです。たとえば、a.xにはaで始まるルックアップチェーンがあります。 dict ['x']と入力し、(a)と入力します。 dict ['x']、メタクラスを除くタイプ(a)の基本クラスを継承します。ルックアップされた値が記述子メソッドの1つを定義するオブジェクトである場合、Pythonはデフォルトの動作を上書きして、代わりに記述子メソッドを呼び出すことができます。これが優先順位チェーンで発生する場所は、定義された記述子メソッドに依存します。記述子は、新しいスタイルオブジェクトまたはクラスに対してのみ呼び出されることに注意してください(クラスはオブジェクトまたはタイプから継承する場合、新しいスタイルです)。

単純に、オブジェクトの属性にアクセスするが、コードを実行する場合など。型チェックのために、属性を使用して関数を渡して(get、set、delete)属性アクセスのデフォルト動作を変更することができます。

アンダースコアは、通常、プライベートアトリビュートを示すために使用されます。

関連する問題