如何在Python模块中挂钩一个函数?

3 投票
1 回答
4904 浏览
提问于 2025-04-18 01:50

我在我的虚拟环境里有一个包,这个包安装在 site-packages 文件夹里。这个包里面有一个模块,里面有很多函数。我想在不修改包代码的情况下,改变其中一个函数的行为,所以我想给这个模块做一个“钩子”,然后修改或覆盖这个函数,让它按我想要的方式工作。

我不知道在Python中这是否可行(我对这个语言还很陌生)。

举个例子:

我在 site-packages 文件夹里有一个叫做 their_package 的包,里面有一个名为 whatever.py 的模块,代码如下:

import sys
import os

def this_is_a_function(parameter):
    //whatever logic in here
    return result

我想给 whatever.py 模块做一个钩子,这样我就可以重新定义 this_is_a_function,让它有不同的逻辑。这样做可能吗?如果能给我一个代码示例,我会非常感激!

1 个回答

4

你可以通过下面的方式重新定义你的函数:

import whatever

def this_is_a_function(parameter):
    pass

whatever.this_is_a_function = this_is_a_function

撰写回答