python:修饰模块的现有方法

时间:2017-06-26 02:21:17

标签: python python-2.7

我的应用程序有很多调用请求方法(get,post,put,delete)。我想点击这些调用来打印出我的应用程序之外的所有调用的调试/跟踪信息。

我在venv中运行所有内容,所以一个明显的选择是去venv中的reqeusts模块并使用可以进行必要日志记录的函数来装饰4个方法。

还有另一种方法可以达到这个目的吗?

import requests

# do some magic to install a decorative method for requests.get

requests.get('http://google.com')

应该导致装饰器接到调用,这将进行必要的记录。

我查看了patch / flexmock / requests_mock,但似乎我需要提供该方法的替代实现。我需要的是一种装饰现有方法的方法。

1 个答案:

答案 0 :(得分:0)

装饰器只是一个返回另一个函数的函数:

def decorator(f):
    def inner(*args, **kwargs):
        print(args, kwargs)
        return f(*args, **kwargs)
    return inner

requests.get = decorator(requests.get)
requests.get('http://google.com')

(('http://google.com',), {})
<Response [200]>