【发布时间】:2019-02-21 11:17:23
【问题描述】:
我有一个名为Client 的类,它使用requests 模块与服务交互。它有如下方法:
def get_resource(self, url, headers):
response = requests.get(url, headers, auth=self.auth)
return response
现在我想在每次调用请求模块之前和之后调用一些方法。比如:
def get_resource(self, url, headers):
self.add_request_header(headers)
response = requests.get(url, headers, auth=self.auth)
self.process_response_headers()
return response
我很难找到一种无需重写所有Client 方法的方法。最直接的方法是将对 request 模块的调用更改为对 self 的调用,然后将调用添加到那里的方法。
def get_resource(self, url, headers):
response = self.__get(url, headers, auth=self.auth)
return response
def __get(self, headers, auth):
self.add_request_header(headers)
response = requests.get(url, headers, auth=self.auth)
self.process_response_headers()
return response
但这需要我更改所有调用站点并复制请求模块的功能。我尝试使用装饰器将这些方法调用添加到请求模块函数中,但不知道如何将 self 传递给装饰器。
我确信在 Python 中有一种优雅的方法可以做到这一点。
【问题讨论】:
-
您能否像您所说的卡住一样展示您使用装饰器的尝试?
标签: python python-3.x python-decorators