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

Jak*_*ake 6 python django rest import

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

这是我正在做的简化版本.

我想要的:导入一个方法并使用它,但在mod2中查看f.它需要导入模块的一些信息.

MOD1:

from mod2 import f
f(...)
Run Code Online (Sandbox Code Playgroud)

MOD2:

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)
Run Code Online (Sandbox Code Playgroud)

我丑陋的解决方法:

MOD1:

from mod2 import f as _f
def f(*a, **k):return _f(__name__, globals(), *a, **k)
f(...)
Run Code Online (Sandbox Code Playgroud)

MOD2:

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)
Run Code Online (Sandbox Code Playgroud)

nos*_*klo 6

这是个坏主意,因为模块是缓存的.

因此,如果另一个模块mod3.py也会导入mod2,它将mod2首次获得相同的对象.该模块不会重新导入.

也许您mod2在导入mod2自己之前导入了导入的其他模块,然后您就不再导入mod2了.模块只导入一次.

因此,您应该使用另一种可重用的方法,而不是试图让谁导入模块.也许使用类并传递实例?