【发布时间】:2017-02-21 10:43:13
【问题描述】:
我正在尝试扩展requests.Response,但我不知道该怎么做。
我想要的是扩展requests.Response。我看到的问题是我必须创建一个全新的库分支,或者至少创建一个自定义适配器并为此实现自定义代码。
我目前将响应存储在我的新类的属性中,但这意味着我的自定义 APIResponse 实际上并不像扩展的 requests.Response 对象。
这是我目前的虚拟工作。
class APIResponse:
def __init__(self, req_response, formatted_json=None):
self._content = req_response._content
self._response = req_response
@property
def response(self):
return self._response
如上所述,我希望我的自定义类的行为类似于 requests.Response 对象,并具有一些额外的功能。由于Response 对象是在非常低的级别生成的,即requests 库中的HTTPAdapter 模块,我还必须编写一个自定义适配器——并且从逻辑上讲,还要自定义requests.Sessions 类,它被称为。
这一切都让我相信我在这里遗漏了一些东西。
有没有一种明智的方法来扩展request.Response 对象,而无需大量代码?
我还尝试在实例化的Response 对象周围“包装”一个类,但它看起来很hacky:
class APIResponse(Response):
__attrs__ = ['_content', 'status_code', 'headers', 'url', 'history',
'encoding', 'reason', 'cookies', 'elapsed', 'request',
'_formatted']
def __init__(self, req_response):
self._content = req_response._content
self._content_consumed = req_response._content_consumed
self.status_code = req_response.status_code
self.headers = req_response.headers
self.url = req_response.url
self.history = req_response.history
self.encoding = req_response.encoding
self.reason = req_response.reason
self.cookies = req_response.cookies
self.elapsed = req_response.elapsed
self.request = req_response.request
【问题讨论】:
标签: python-3.x python-requests