Можно ли установить глобальную переменную в основном модуле из импортированного модуля (используя строку) в python?Заменить функцию в основном модуле из импортированного модуля в Python
(Да, я знаю, что это не лучшие практики.)
В конце концов, я хочу, чтобы это выглядело примерно так:
main.py
import mod
def func():
print('failure')
mod.run(func)
func()
mod.py
def func2():
print('success')
def run(f):
globals()[f.__name__] = func2
Результат: 'failure'
, поскольку глобальный относительно модуля.
Я хочу переписать переменную func
с func2
, из модуля.
Другой нюанс: переменная func
изменения, так что мне нужно обратиться к нему быть f.__name__ string
Я понимаю, что этот подход не будет работать, если имя func
были изменены, прежде чем он изменился с помощью mod.run(func)
.
Мой вопрос: Возможно ли изменить функцию в основном модуле из импортированного модуля, не меняя код в приведенном выше примере main.py
? Если да, то как?
код действительно будет f .__ code__ = func2__code__ Но это выполняет «то, что я действительно пытался сделать». – Paul
Ах, да, 'func_code' было старым именем 2.x для того же атрибута. (Я забыл, когда был введен «__code__», но он доступен как минимум 2.7, а также 3.x). – chepner
Спасибо за помощь, хотя я понял, что вы имели в виду, и, вероятно, по-прежнему будет бороться с этой проблемой. – Paul