2014-09-11 91 views
0

我剛剛啓動了一個Python包,用於直接從經濟分析局(BEA)數據API訪問數據。我有兩個高級抽象:RequestResultsRequest對象繼承自dict並使用請求庫來訪問數據。如何在字典更改時刷新緩存的值?

import requests 


class Request(dict): 

    _response = None 

    base_url = 'http://www.bea.gov/api/data' 

    def __init__(self, UserID, Method, ResultFormat='JSON', **params): 
     required_params = {'UserID': UserID, 
          'Method': Method, 
          'ResultFormat': ResultFormat} 
     required_params.update(params) 
     super(Request, self).__init__(**required_params) 

    @property 
    def response(self): 
     if self._response is None: 
      self._response = requests.get(url=self.base_url, params=self) 
     return self._response 

因爲下載數據可能很耗時我正在緩存響應屬性。我目前的實現永遠不會刷新緩存。如果字典的任何值發生更改或添加/刪除,我想刷新緩存。思考?

回答

2

只需重寫相關的映射方法。

class Request(dict): 
    ... 
    def __setitem__(self, item, value): 
    self._response = None 
    return super(Request, self).__setitem__(item, value) 

    def __delitem__(self, item): 
    self._response = None 
    return super(Request, self).__delitem__(item)