Python:在部分代码中修补内部库函数



在Python中,我想修补requests.request来做一些自定义的事情(例如print一些东西),所以通过我的模块导入的所有函数都可以做到这一点。

但是,我希望它使原始requests函数保留其旧行为,同时不再重新实现所有函数。这可能吗?

如果您知道requests库,则可以跳过的介绍

requests有一个模块api,其中实现了request功能。其他方便函数如getpost等调用此函数,因此可以通过更改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来解决,但我很好奇是否可以在不这样做的情况下解决。

相关内容

  • 没有找到相关文章

最新更新