[英]Replace function in main module from imported module in 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'
因為全局相對於模塊。
我想從模塊中用func2
覆蓋變量func
。
另一個警告:變量func
發生了變化,因此我需要將其稱為f.__name__ string
我知道,如果在通過mod.run(func)
更改func
的名稱之前更改了此方法,則此方法將行不通。
我的問題:是否可以從導入的模塊更改主模塊中的功能,而無需更改上述示例main.py
的代碼? 如果是這樣,怎么辦?
您可以更改功能func
實際執行的綁定代碼,而不是更改func
名稱綁定的名稱。
def func2():
print('success')
def run(f):
f.__code__ = func2.__code__
這會修改func
引用的實際功能對象,並且僅部分使用上面的代碼,因此可能需要進一步的手術(例如,將func.__name__
更新為func2
而不是func
),並且您可能想要制作func
的真實副本。在猴子像這樣修補之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.