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

Paw*_*wel 25 python

我有问题覆盖从...使用import语句的方法.举例说明问题:

# a.py module
def print_message(msg):
    print(msg)

# b.py module
from a import print_message
def execute():
    print_message("Hello")

# c.py module which will be executed
import b
b.execute()
Run Code Online (Sandbox Code Playgroud)

我想在不更改a或b模块中的代码的情况下覆盖print_message(msg)方法.我试过很多方面,但从...导入导入原始方法.当我将代码更改为

import a
a.print_message
Run Code Online (Sandbox Code Playgroud)

比我看到我的变化.

你能建议我如何解决这个问题吗?
提前感谢任何一个小例子.

最好的祝福

------------------更新------------------
我试着这样做,如下所示:

# c.py module
import b
import a
import sys
def new_print_message(msg):
    print("New content")
module = sys.modules["a"]
module.print_message = new_print_message
sys.module["a"] = module
Run Code Online (Sandbox Code Playgroud)

但这不适用于我用于... import语句的地方.仅适用于导入,但正如我所写,我不希望在b.py和a.py模块中更改代码.

uhz*_*uhz 42

随着您ab模块的不变,您可以尝试实现c如下:

import a

def _new_print_message(message):
    print "NEW:", message

a.print_message = _new_print_message

import b
b.execute()
Run Code Online (Sandbox Code Playgroud)

您必须首先导入a,然后重写该函数,然后导入,b以便它将使用a已导入(和更改)的模块.

  • 你的代码正在运行。我的错误是我在重写 print_message 方法之前放置了 import b 语句。在 a.print_message = _new_print_message 代码之后导入 b 代码可以正常工作。感谢帮助。 (2认同)