如果您知道
在Python中,我想修补requests.request
来做一些自定义的事情(例如print
一些东西),所以通过我的模块导入的所有函数都可以做到这一点。
但是,我希望它使原始requests
函数保留其旧行为,同时不再重新实现所有函数。这可能吗?
如果您知道requests
库,则可以跳过的介绍
requests
有一个模块api
,其中实现了request
功能。其他方便函数如get
、post
等调用此函数,因此可以通过更改api
模块中的request
函数来轻松更改它们的行为。
法典
# my_requests.py
from requests import api, get, head, post, patch, put, delete, options
def request(method, url, **kwargs):
my_additional_string_for_fun = kwargs.pop("fun_string", "")
print(f"requesting with method {method}n{my_additional_string_for_fun}")
with sessions.Session() as session:
# some fiddling with the session object here
return session.request(method=method, url=url, **kwargs)
api.request = request
但是尝试一下:
>>> import my_requests
>>> my_requests.get("http://httpstat.us/200", fun_string="Hi there!")
requesting with method get
Hi there!
<Response [200]>
>>> import requests
>>> requests.get("http://httpstat.us/200", fun_string="Hi there!") # I want this to raise TypeError
equesting with method get
Hi there!
<Response [200]>
似乎即使我通过requests
导入它,我也已经更改了它。如何避免这种情况?
重申一下:我知道这可以通过将文件的这个和其余部分复制粘贴到my_requests.py
来解决,但我很好奇是否可以在不这样做的情况下解决。