假设我要动态修补tkinter.Tk
以使窗口停留在最前面。如果我确定以下代码确实使用了Tkinter,则可以import tkinter
在其余代码之前执行必要的更新。
但是如何按需设置模块补丁,即。仅当其余代码真正导入模块时?
我了解sys.path_hooks
和sys.meta_path
,但是希望有一些简单的方法。我不想更改查找或加载机制,我只想在将导入的模块对象传递给导入模块之前对其进行控制。
我不需要支持3.5以上的Python版本。
我选择包装builtins.__import__
:
此功能由import语句调用。可以替换它(通过导入Builtins模块并分配给
builtins.__import__
),以更改import语句的语义
import builtins
original_import = builtins.__import__
def custom_import(*args, **kw):
module = original_import(*args, **kw)
if (module.__name__ == "interesting_module"
and not getattr(module, "patch_is_performed", False)):
patch(module)
module.patch_is_performed = True
return module
builtins.__import__ = custom_import
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句