如何在字典更改时刷新缓存的值?

2024-04-27 03:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚启动了一个Python包,用于直接从bureauofeconomicanalysis(BEA)的dataapi访问数据。我有两个高级抽象: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

因为下载数据可能很耗时,所以我正在缓存response属性。我当前的实现从不刷新缓存。如果字典的任何值发生更改或被添加/删除,我想刷新缓存。有什么想法


Tags: 数据selfnoneurlbaseresponserequestdef
1条回答
网友
1楼 · 发布于 2024-04-27 03:14:16

只需重写相关的映射方法

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)

相关问题 更多 >