猴子修补/装饰/包装整个python模块

时间:2018-08-06 07:52:57

标签: python monkeypatching

在给定一个python模块的情况下,我想对它定义的所有函数,类和属性进行猴子补丁。简而言之,我想记录我不直接控制的脚本与我不直接控制的模块的每次交互。我正在寻找一种优雅的解决方案,该解决方案不需要模块或使用它的代码的先验知识。

我找到了一些有助于包装,装饰,修补等的高级工具……并且我已经遍历了其中一些的代码,但是我找不到一个优雅的解决方案来创建任何给定模块的代理,并且除了将逻辑附加到每个交互(例如,记录输入自变量和返回值)之外,自动无缝地代理它。

1 个答案:

答案 0 :(得分:0)

如果其他人正在寻找更完整的代理实现

尽管有几种与OP相似的python代理解决方案,但我找不到能同时代理和任意 class对象的解决方案作为 proxy 的自动功能,它们将返回值自变量。这就是我所需要的。

我已经为此目的编写了一些代码,作为完整的代理/日志记录python执行的一部分,将来我可能会将其放入一个单独的库中。如果有人感兴趣,您可以在pull request中找到代码的核心。如果您希望将其作为独立库,请给我下一行。

我的代码将自动返回任何代理对象的属性,函数和类的包装器/代理对象。目的是记录和重播一些代码,因此我具有等效的“重播”代码和一些逻辑,用于将所有代理对象存储到json文件中。