gpt4 book ai didi

python - 拦截模块调用?

转载 作者:行者123 更新时间:2023-11-28 20:28:44 25 4
gpt4 key购买 nike

我正在尝试“拦截”对特定模块的所有调用,并将它们重新路由到另一个对象。我想这样做是为了拥有一个相当简单的插件架构。

例如在main.py中

import renderer

renderer.draw('circle')

在 renderer.py 中

specificRenderer = OpenGLRenderer()

#Then, i'd like to route all calls from main.py so that
#specificRenderer.methodName(methodArgs) is called
# i.e. the above example would call specificRenderer.draw('circle')

这意味着任何功能都可以只导入渲染器并使用它,而无需担心细节。这也意味着我可以通过创建另一个对象并将其分配给 renderer.py 中的“specificRenderer”值来完全更改渲染器

有什么想法吗?

最佳答案

renderer.py中:

import sys

if __name__ != "__main__":
sys.modules[__name__] = OpenGLRenderer()

模块名称现在映射到OpenGLRenderer实例,其他模块中的import renderer将得到相同的实例。

实际上,您甚至不需要单独的模块。你可以这样做:

import sys
sys.modules["renderer"] = OpenGLRenderer()
import renderer # gives current module access to the "module"

... 主模块中的第一件事。在其他模块中导入 renderer 将再次引用同一实例。

一开始您确定要这样做吗?这并不是人们真正期望模块的行为方式。

关于python - 拦截模块调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com