Код: Выделить всё
# my_module.py
print("hello")
< /code>
Тогда у меня есть простой скрипт: < /p>
# my_script.py
import my_module
< /code>
Это будет печатать «Привет» < /code>.
Допустим, я хочу «переопределить» функцию print ()
Что я думал Что мне нужно каким -то образом изменить исходный код my_module до или во время его импорта. Очевидно, я не могу сделать это после импорта, поэтому решение с использованием unittest.mock невозможно. Код>, выполните модификацию, затем загрузите ее. Но это уродливо, так как он не будет работать, если модуль находится где -то еще. . Я думал, что могу просто переопределить: < /p>
def get_source(fullname):
source = super().get_source(fullname)
source = source.replace("hello", "world")
return source
< /code>
К сожалению, я немного потерян со всеми этими абстрактными классами, и я не знаю, как выполнить это правильно. < /p>
Я пытался тщетно: < /p>
spec = importlib.util.find_spec("my_module")
spec.loader.get_source = mocked_get_source
module = importlib.util.module_from_spec(spec)
< /code>
Любая помощь будет приветствовать, пожалуйста. < /p>
Подробнее здесь: https://stackoverflow.com/questions/418 ... on-the-fly