Как изменить импортированный исходный код на лету?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как изменить импортированный исходный код на лету?

Сообщение Anonymous »

Предположим, у меня есть файл модуля, как это: < /p>

Код: Выделить всё

# my_module.py
print("hello")
< /code>

Тогда у меня есть простой скрипт: < /p>

# my_script.py
import my_module
< /code>

Это будет печатать «Привет» < /code>. 

Допустим, я хочу «переопределить» функцию print () 
, чтобы она возвращала «мир» вместо этого. Как я мог сделать это программно (без вручную изменяя my_module.py < /code>)? < /P>



Что я думал Что мне нужно каким -то образом изменить исходный код 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»