You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在被__init__.py遮蔽的模块中Patch module_b方法?

解决方案

你可以通过直接修改some_module.module模块对象的module_b属性来实现patch,具体修改main.py如下:

# main.py
# 先导入模块对象
import some_module.module
# 替换模块中的module_b
some_module.module.module_b = lambda: print("other module")
# 再导入并调用module函数
from some_module.module import module
module()

运行后输出符合预期:

In module
other module

原理说明

module()函数调用module_b()时,会去它所在的some_module.module模块全局命名空间中查找module_b。只要在调用module()前修改该模块对象的module_b属性,函数运行时就会使用替换后的lambda函数。

临时patch方案(适合测试场景)

如果需要临时替换、退出后自动恢复原函数,可以用Python标准库的unittest.mock.patch:

# main.py
from unittest.mock import patch
from some_module.module import module

with patch('some_module.module.module_b', lambda: print("other module")):
    module()

内容的提问来源于stack exchange,提问作者Ilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:21:01