如何按名称从另一个包中获取对模块的引用?
考虑:
genericCall(packageName, moduleName, methodName):
#Call moduleName.methodName
#knowing that the moduleName is in packageName
在哪里
packageName="p1"
moduleName="m1"
methodName="f1"
如何按名称从另一个包中获取对模块的引用?
考虑:
genericCall(packageName, moduleName, methodName):
#Call moduleName.methodName
#knowing that the moduleName is in packageName
在哪里
packageName="p1"
moduleName="m1"
methodName="f1"
您必须导入模块或包,并按名称执行,您可以使用__import__
or importlib.import_module
。
import importlib
def genecirCall(package_name, module_name, function_name):
# import module you need
module = importlib.import_module('%s.%s' % (package_name, module_name))
getattr(module, function_name)() # make a call
请注意,在此示例中,module
变量将是本地的。
__import__
提供动态导入包的能力。然后在导入包后,您可以使用getattr
从模块名称中获取模块对象(这introspection
在 Python 中调用)。由于这两个函数都是内置函数,您可以在不显式导入其他包的情况下使用它们。该文档提供了这些内置函数的更多信息。
package = __import__(packageName)
module = getattr(package, moduleName)
method = getattr(module, methodName)
method(...)