我有问题要覆盖使用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模块中的代码。
在不修改a和b模块的情况下,您可以尝试执行c以下操作:
a
b
c
import a def _new_print_message(message): print "NEW:", message a.print_message = _new_print_message import b b.execute()
您必须先导入a,然后覆盖函数,然后再导入,b以便它将使用a已导入(和更改)的模块。