monkey-patching/decorating/wrapping 整个 python 模块

monkey-patching/decorating/wrapping an entire python module

我想,给定一个 python 模块,猴子修补它定义的所有函数,类 和属性。简而言之,我想 log 我不直接控制的脚本与我不直接控制的模块的每次交互。我正在寻找一个优雅的解决方案,不需要事先了解模块或使用它的代码。

我找到了几个有助于包装、装饰、修补等的高级工具...我已经检查了其中一些的代码,但我找不到一个优雅的解决方案来创建任何给定的代理模块并尽可能无缝地自动代理它,除了将逻辑附加到每个交互(例如,记录输入参数和 return 值)。

以防其他人正在寻找更完整的代理实施

虽然有几个 python 代理解决方案类似于 OP 正在寻找的解决方案,但我找不到也能代理 classes 的解决方案和任意class对象,以及自动代理函数return值 个参数 。这正是我需要的。

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

我的代码将自动为任何代理对象的属性、函数和 classes return wrapper/proxy 个对象。目的是记录和重播一些代码,所以我有等效的 "replay" 代码和一些逻辑来将所有代理对象存储到 json 文件。