簡體   English   中英

從Python中的導入模塊替換主模塊中的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM