覆盖模块方法,使用了from...import

9 浏览
0 Comments

覆盖模块方法,使用了from...import

我在覆盖使用from...import语句的方法时遇到了问题。以下是一些例子以说明问题:

# a.py模块
def print_message(msg):
    print(msg)
# b.py模块
from a import print_message
def execute():
    print_message("Hello")
# c.py模块将被执行
import b
b.execute()

我想覆盖print_message(msg)方法,但不想改变a.py或b.py模块中的代码。我尝试了很多方法,但from...import会导入原始方法。当我将代码更改为

import a
a.print_message

时,我看到了我的更改。

你能否建议如何解决这个问题?

------------------ 更新 ------------------

我尝试像下面这样做,例如:

# c.py模块
import b
import a
import sys
def new_print_message(msg):
    print("新内容")
module = sys.modules["a"]
module.print_message = new_print_message
sys.module["a"] = module

但是这在使用from...import语句时不起作用。只对import a有效,但正如我所写的,我不想改变b.py和a.py模块中的代码。

0