Итак, у меня есть приложение Python, у которого есть эта функция, где любой модуль-подобный файл в подкаталоге extensions
каталога программ импортируется на ранней стадии процесса инициализации приложения.Monkey patch модуль, который импортирует этот
Это выглядит примерно так (предположим это my_application.py
):
def do_init():
for thefname in glob.iglob(os.path.join(".","extensions","*")):
SourceFileLoader(os.path.basename(thefname),thefname).load_module()
#do other init stuff...
if __name__ == "__main__":
do_init()
do_cool_things()
Теперь, я хотел бы быть в состоянии иметь .py файл в этом каталоге расширений, что идет что-то вроде этого:
import my_application
def my_cool_things():
print("The original things have been overridden.")
my_application.do_cool_things = my_cool_things
И это работает ... для будущих импортных товаров my_application
. Но вызов do_cool_things
внутри охранника if __name__ == "__main__"
показывает оригинальное поведение. Почему это происходит, и как я могу заставить этот вызов проявить измененное поведение?
Это работает! И здесь я пытаюсь получить функции модуля, разворачивая стек через импортную машину ...: P – Schilcote