2017-01-23 59 views
0

我有兩個有很多屬性的類,除了一個之外,其他都應該有類似的屬性函數。我更願意避免爲所有屬性手動編寫這些屬性,因爲這樣做會很乏味,並且會強制我在添加到類中的每個屬性上進行跟蹤。另外,我需要爲超過一個班級做。在很多類屬性上使用屬性

我將在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):return 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__來處理設置這些相同屬性的選通或轉換。