使用基于条件的Python模块

时间:2013-08-20 19:49:01

标签: python import module

我希望在我的课程中动态导入模块,具体取决于某些条件。

    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()

这有效,但可能有更惯用的方法吗?有任何可能的问题吗?

1 个答案:

答案 0 :(得分: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