gpt4 book ai didi

Python:从导入的模块中获取导入模块的详细信息

转载 作者:太空狗 更新时间:2023-10-30 02:35:35 30 4
gpt4 key购买 nike

我正在编写一段可重复使用的代码来导入我需要的地方,但它需要一些关于导入它的信息。我有一个解决方法可以满足我的要求,但它有点难看。有没有更好的办法?

这是我正在做的事情的简化版本。

我想要的 导入一个方法并使用它,但是看看 mod2 中的 f。它需要来自导入模块的一些信息。

mod1:

from mod2 import f
f(...)

模组2:

from things_i_want import parent_module, importing_module
def f(*args, **kwargs):
from importing_module.parent_module import models
# ... do some stuff with it, including populating v with a string

v = 'some_string'
m = getattr(importing_module, v, None)
if callable(m)
return m(*args, **kwargs)

我丑陋的解决方法:

mod1:

from mod2 import f as _f
def f(*a, **k):return _f(__name__, globals(), *a, **k)
f(...)

模组2:

def f(module_name, globs, *args, **kwargs):
# find parent modules path
parent_module_path = module_name.split('.')[0:-1]
# find models modules path
models_path = parent_module_path + ['models',]
# import it
models = __import__('.'.join(models_path), {}, {}, [''])
# ... do some stuff with it, including populating v with a string

v = 'some_string'
if v in globs:
return globs[v](*args, **kwargs)

最佳答案

这是个坏主意,因为模块被缓存了。

因此,如果另一个模块,例如 mod3.py,也导入了 mod2,它将获得与第一次相同的 mod2 对象.该模块未重新导入。

也许您在自己导入 mod2 之前导入了一些导入了 mod2 的其他模块,那么您就不再是导入 mod2 的人了。模块只导入一次。

因此,与其尝试获取谁导入了模块,不如使用另一种可重用的方法。也许使用类并传递实例?

关于Python:从导入的模块中获取导入模块的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2026788/

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