У меня есть проблема, чтобы переопределить метод where from ... import statement используется. Некоторые примеры, чтобы проиллюстрировать эту проблему:Переопределить метод модуля, где из ... импорт используется
# 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) без изменения кода в модуле А или Б. Я пытался во многих отношениях, но из ... импорт импортирует оригинальный метод. Когда я сменил код на
import a
a.print_message
чем я вижу мое изменение.
Не могли бы вы предложить мне, как решить эту проблему?
Заранее благодарим за любой маленький пример.
С наилучшими пожеланиями
------------------ Обновление ------------------
I попытался сделать это, например, ниже:
# 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.
(1) Что именно вы подразумеваете под «переопределением»? Патч обезьяны? (2) В коде, который вы представляете, есть только один 'print_message()'. – NPE
Я хочу изменить метод print_message() для печати, например. Сообщение «Новый контент». Как добиться этого из файла c.py без изменения в файлах a.py и b.py? – Pawel
для объяснения и демонстрации «патча обезьяны»: http://stackoverflow.com/a/6647776/1498405 – hardmooth