2017-01-23 3 views
0

多くの属性を持つ2つのクラスがありますが、1つを除くすべてのクラスは類似のプロパティ関数を持つ必要があります。私は、これらのプロパティをすべての属性に対して手動で記述することを避けることをお勧めします。これは面倒な作業であり、クラスに追加する各属性についてフォローアップする必要があるためです。また、私は複数のクラスのためにそれを行う必要があります。多くのクラス属性でプロパティを使用する

my_containerのオブジェクトが生成された後でこれを使用します。 以下は、解決したい場合の簡単な例です。特定のパターンをたどる一連のプロパティについては

def my_class:    

    @property 
    def a1(self): 
    return self.my_container._a1 
    ... 
    @property 
    def a10(self): 
    return self.my_container._a10 
+0

プロパティでなければなりませんか?代わりに '__getattr__'関数を実装するだけで済みます。 'def __getattr __(self、name):getattr(self、 '_' + name)'を返します。 –

+0

setattrも実装する必要があります。このコードでは魔法のメソッドを避けることをお勧めします@MartijnPieters – Tsachi

+0

次に、クラスデコレータまたはメタクラスのいずれかを使用して、すべてのプロパティオブジェクトを生成します。 –

答えて

0

、私は__getattr__フックを使用したい:

def __getattr__(self, name): 
    # translate a\d names into _a\d 
    if name.startswith('a') and name[1:].isdigit(): 
     return getattr(self, '_' + name) 

これは、(それだけで、それらの属性直接を設定することが容易ではないことを前提とししたがって_a0の代わりにa0を追加してください)。同じ属性を設定する際にゲーティングや変換を処理する対応する__setattr__もあります。

関連する問題