小编典典

使用from…import的覆盖模块方法

python

我有问题要覆盖使用from … 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()

我想重写print_message(msg)方法而不更改a或b模块中的代码。我尝试了很多方法,但是从… import导入了原始方法。当我将代码更改为

import a
a.print_message

比我看到的改变。

你能建议我如何解决这个问题吗?
预先感谢您的任何小例子。

最好的祝福

------------------更新------------------
我试图这样做,例如:

# 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

但这在我使用for … import语句的地方不起作用。仅适用于导入a,但是正如我写的那样,我不想更改b.py和a.py模块中的代码。


阅读 321

收藏
2020-12-20

共1个答案

小编典典

在不修改ab模块的情况下,您可以尝试执行c以下操作:

import a

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

a.print_message = _new_print_message

import b
b.execute()

您必须先导入a,然后覆盖函数,然后再导入,b以便它将使用a已导入(和更改)的模块。

2020-12-20