2012-04-30 4 views
-1

は私のコードです:私がやりたいものをどのようにプロパティを返してグローバル変数として保存しますか?ここで(パイソン)

def createProp(fget, fset, fdel): 

    class prop(object): 
     get=property(fget,fset,fdel) 

    return prop().get 
x=createProp(getter,setter,deleter) 

は、私は、変数XAプロパティを作ることができるように、それが財産を返す必要がありますが、私が作る方法を見つけ出すことはできませんこのような関数。その代わりに、プロパティ自体の値ではなくプロパティの値が返されます。

のpython 2.6

+2

propオブジェクトのプロパティを作成してから呼び出します。私は、クラスの外のプロパティオブジェクトがどのように意味をなされるかわからない。プロパティは、基本的に、クラスインスタンス内の擬似プライベートまたは計算されたデータへのカプセル化されたアクセサのセットです。この機能の使用例を説明できますか? –

答えて

4
createProp = property 

プロパティは完全に普通のオブジェクトです。 propertyは単なる別のクラスです。実行時に、必要なコンテキスト(クラスは不要)で渡したり、パスしたりすることができます。そうすれば、ローカルクラスでインスタンスを作成してそこからフェッチすることもできます。しかし、プロパティの全体がインスタンス上の属性アクセスをオーバーライドしているので、クラスreturn prop.getからフェッチする必要があります。

しかし、propertyは、descriptor protocolを使用してその魔法を動作させ、記述子は動作するクラスに属している必要があります。グローバル(またはローカル)変数をプロパティとして使用することはできません。しかし、それを使用すると、fgetは実行されず、記述子オブジェクトが与えられ、割り当てはfsetをトリガーしません。そんなことはできませんし、そうしてはいけません。

+0

グローバルプロパティを作成できない場合は、定数を返す関数を作成するための回避策がいくつかありますか? – QxQ

+0

@QxQ「定数を返す関数」は、全く異なるもので、 'def f():return 'と同じくらい簡単です。どうか明らかにしてください。 – delnan

+0

私は、プロパティを変更しようとするとエラーをスローするセッターを作成させることができると思っていましたが、グローバル変数として使用することはできませんので、変数のアクセスを制限するためのその他の回避策を知りたいと思います(とそのようなsimularもの)。 – QxQ

関連する問題