2017-01-27 14 views
1

変数の名前のリストに基づいてクラスを開始したいと考えています。ここでは、明確にする文字列の値に基づいて変数を作成する

は私の非DRYコードです:

def __init__(self, page): 
     self.page_id = page.page_id 
     self.page_access_token = page.page_access_token 
     self.page_fans_country = _get(obj=self._request(endpoint='page_fans_country', period='')) 
     self.page_fans_gender_age = _get(obj=self._request(endpoint='page_fans_gender_age', period=''),) 
     self.page_impressions = _get(obj=self._request(endpoint='page_impressions', period='')) 
     self.page_impressions_unique = _get(obj=self._request(endpoint='page_impressions_unique', period='')) 
     self.page_impressions_by_country_unique = _get(obj=self._request(endpoint='page_impressions_by_country_unique', period='')) 
     self.page_impressions_by_age_gender_unique = _get(obj=self._request(endpoint='page_impressions_by_age_gender_unique', period='')) 
     self.page_engaged_users = _get(obj=self._request(endpoint='page_engaged_users', period='')) 
     self.page_consumptions = _get(obj=self._request(endpoint='page_consumptions', period='')) 
     self.page_consumptions_unique = _get(obj=self._request(endpoint='page_consumptions_unique', period='')) 

それはDRYではありません - 私は、エンドポイントの名前を変更したい場合には、私は二度変更を加える必要があります。

def __init__(self, page): 
    self.page_id = page.page_id 
    self.page_access_token = page.page_access_token 

    list = ['page_fans_country','page_fans_gender_age',(...)] 

    for element in list: 
     self.{ var with the name of element } = _get(obj=self._request(endpoint=element, period='')) 
+0

hasattr/getattrを試しましたか? –

答えて

3

は、あなたが一般的のためsetattrを使用しますどのように見える:

これを実行する方法はあります。そして、関数を使用して、_getの呼び出しをクリーンアップすることができます。

class Dry(object): 
    def __init__(self, page): 
     ... 
     for item in lst: 
      setattr(self, item, self.alloc(item)) 

    def alloc(self, endpoint, period=''): 
     return _get(obj=self._request(endpoint=endpoint, period=period)) 
+0

非常にクリアです。ありがとう! –

関連する問題