0

いくつかの条件に応じて、モジュールをクラスに動的にインポートしたいと考えています。

    class Test(object):
        def __init__ (self,condition):
            if condition:
                import module1 as mymodule
            else:
                import module2 as mymodule

            self.mymodule = mymodule

        def doTest(self):
            self.mymodule.doMyTest

ここで、module1 と module2 は異なる方法で doMyTest を実装します。

と呼ぶ

    mytest1 = Test(true)  # Use module1
    mytest2.doTest()

    mytest2 = Test(false)  # Use module2
    mytest2.doTest()

これは機能しますが、もっと慣用的な方法はありますか? 考えられる問題はありますか?

4

1 に答える 1

1

もちろん、通常、__init__メソッドの途中でモジュールをインポートすることは望ましくありませんが、テスト クラスはそのルールの明らかな例外であるため、その部分を無視して、トップ レベルでこれを行っていると想像してみましょう。

if test_c_implementation:
    import c_mymodule as mymodule
else:
    import py_mymodule as mymodule

それは完全に慣用的です。実際、コア開発者が作成した stdlib やその他のコードには、そのようなコードが見られます。

非常に一般的なEAFPの場合を除いて、例外を回避するために条件が存在する場合は、次のようにする方がより慣用的です。

try:
    import lxml.etree as ET
except ImportError:
    import xml.etree.cElementTree as ET
于 2013-08-20T19:55:24.000 に答える