我試圖擴展requests.Response
,但我不知道如何去做。我想要的是擴展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
對象的類,但它看起來非常哈克:
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
更清潔,更優雅。也做我沒有麻煩的需要。乾杯! – nlsdfnbch