2015-06-15 91 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