2

クラスで、N 個の永続プロパティを定義したいと考えています。次のように実装できます。

@property
def prop1(self):
    return self.__prop1
@prop1.setter
def prop1(self, value):
    self.__prop1 = value
    persistenceManagement()        

@property
def prop2(self):
    return self.__prop2
@prop2.setter
def prop2(self, value):
    self.__prop2 = value
    persistenceManagement()       

[...]

@property
def propN(self):
    return self.__propN
@propN.setter
def propN(self, value):
    self.__propN = value
    persistenceManagement()       

もちろん、これらのブロックの違いはプロパティ名 (prop1、prop2、...、propN) だけです。persistenceManagement() は、これらのプロパティのいずれかの値が変更されたときに呼び出す必要がある関数です。

これらのコード ブロックは 1 つの情報 (つまり、プロパティ名) を除いて同一であるため、これらのブロックのそれぞれを、特定の名前を持つ永続プロパティの存在を宣言する 1 行に置き換える何らかの方法が必要であると思います。何かのようなもの

def someMagicalPatternFunction(...):
     [...]


someMagicalPatternFunction("prop1")
someMagicalPatternFunction("prop2")
[...]
someMagicalPatternFunction("propN")

...または、現時点では見られない装飾のトリックかもしれません。誰かがこれをどのように行うことができるか考えていますか?

4

2 に答える 2

1

propertyクラス (はい、それはクラスです) は、プロトコルの可能な実装の 1 つにすぎません(descriptor完全に文書化されている: http://docs.python.org/2/howto/descriptor.html )。独自のカスタム記述子を作成するだけで完了です。

于 2013-10-16T17:02:40.930 に答える