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

モジュールの名前を持つコマンドライン引数として、文字列データを渡します。

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モジュールのインポート元のパッケージを指定するオプションの 2 番目の引数を取ります。

モジュールからクラスを取得してテスト メソッドを取得する必要がある場合は、次のようにしてモジュールから取得できます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 に答える