2015-06-15 45 views
6

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

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

我想知道是否可以导入仅在需要时这些模块,这是一个精确的类的实例,比如:

class SpecificClassThatNeedRandomModule(object): 
    import randomModule 

而且我不知道,这将是一个好的pythonic方式做的伎俩,所以我愿意建议一个正确的方法。

+3

我不认为把import语句在类定义,就像你希望将推迟它。但是,您可以在函数中进行导入,然后只会在第一次调用该函数时才会发生。 –

+2

另外检查[如何测试一个python模块是否已被导入?](http://stackoverflow.com/questions/5027352/how-to-test-if-one-python-module-has-been-imported)。好帖子存在于帖子上。 – FallenAngel

回答

4

有可能在实例化导入模块:

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

但是,这是一个不好的做法,因为它很难知道何时导入完成。您可能需要修改您的模块,这样就不会引发异常,或赶上ImportError

try: 
    import randomModule 
except ImportError: 
    randomModule = None 
+0

虽然这*可能是不好的做法;我相信OP正尝试仅导入实际需要或使用的模块。但对“良好做法”+1。 –

+0

@PadraicCunningham你不能。你必须这样做:''如果randomModule:'' –

3

你要在你的类的构造函数 “进口”:

例子:

class SpecificClassThatNeedRandomModule(object): 

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

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

你是对的,但如果你想在实例的其他功能中使用你的模块,你需要添加'self.randomModule = randomModule'。无论如何感谢您的答案! – CoMartel