4

我正在为 gupshup、nexmo、redrabitt 等服务提供商编写不同的 python 模块。

#gupshup.py
class Gupshup():
    def test():
        print 'gupshup test'

所有其他模块都有 test() 方法,其中包含不同的内容。我知道要调用谁的 test()。我想编写另一个模块提供程序,它看起来像 -

#provider.py
def test():
    #call test() from any of the providers

我将传递一些 sting 数据作为命令行参数,该参数将具有模块的名称。

但我不想导入所有模块,import providers.*然后调用类似providers.gupshup.test(). 只要知道我将在运行时调用谁的 test(),当我想调用它的测试方法时,如何只加载 nexmo 模块?

4

1 回答 1

2

如果您在字符串中包含模块名称,则可以importlib根据需要使用导入所需的模块:

from importlib import import_module

# e.g., test("gupshup")
def test(modulename):
    module = import_module(module_name)
    module.test()

import_module接受一个可选的第二个参数,指定要从中导入模块的包。

如果你还需要从模块中获取一个类来获取测试方法,你可以从模块中获取它getattr

# e.g., test("gupshup", "Gupshup")
def test(modulename, classname):
    module = import_module(module_name)
    cls = getattr(module, classname)
    instance = cls()  # maybe pass arguments to the constructor
    instance.test()
于 2012-12-27T11:20:32.480 回答