Подтвердить что ты не робот

Переопределить метод модуля, где используется... импорт

У меня есть проблема для переопределения метода, из которого используется оператор... 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 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

Но это не работает, когда я использую для... import statement. Я работаю только для импорта, но, как я писал, я не хочу изменять код в модулях b.py и a.py.

4b9b3361

Ответ 1

Если ваши модули 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, который уже импортирован (и изменен).