在类instanciation上导入

时间:2015-06-15 11:30:53

标签: python python-2.7

我正在创建一个包含多个类的模块。我的问题是这些类中的一些需要导入需要手动编译或需要特定硬件才能工作的非常具体的模块。

没有兴趣预先导入每个特定的模块,并且由于某些模块需要特定的硬件才能工作,它甚至可能引发错误。

我想知道是否可以仅在需要时导入这些模块,即实例化精确类,如下所示:

class SpecificClassThatNeedRandomModule(object):
    import randomModule

此外,我不确定这将是一个很好的pythonic方式来做这个技巧,所以我愿意以正确的方式提出建议。

2 个答案:

答案 0 :(得分:4)

可以在实例化时导入模块:

class SpecificClassThatNeedRandomModule(object):
    def __init__(self):
        import randomModule
        self.random = randomModule.Random()

然而,这是一种不好的做法,因为它很难知道导入何时完成。您可能希望修改模块以使其不会引发异常,或者捕获ImportError

try:
    import randomModule
except ImportError:
    randomModule = None

答案 1 :(得分:3)

你想要"导入"在你班级的构造函数中:

示例:

class SpecificClassThatNeedRandomModule(object):

    def __init__(self, *args, **kwargs):
        import randomModule

        self.randomModule = randomModule  # So other methods can reference the module!