2012-03-13 63 views
19

我想知道如果將模塊對象傳遞給需要它的類或對象,而不是使用import可能不是一個壞主意,因爲它避免了對這些模塊的嚴重依賴。Python - '導入'或傳遞模塊作爲參數?

我想知道是否有人比我更瞭解Python Zen可能能夠解釋爲什麼這是一個可怕/不可怕的想法?

+0

它看起來像依賴注入,實際上也是一個好主意。但是,您多長時間需要一個模塊,而不是一個或兩個函數/類? – delnan 2012-03-13 17:54:01

回答

23

你在說什麼叫做dependency injection,並且被認爲是讓你的代碼可測試的好習慣。我不認爲有什麼關於Python的東西會讓它變得不太規範或是一種不好的做法。

還有其他的方法可以做到這在Python,例如通過導入依賴於某種標誌你在通過不同的模塊:您要使用的是模塊

class Foo(object): 
    def __init__(self, testing=False): 
     if testing: 
      import module_test as module 
     else: 
      import module 
     self.module = module 

但經過參考更靈活,更好地分離問題,並且不比傳遞對希望使用的類或實例(或字符串或整數)的引用更爲Pythonic。

對於普通(非測試)的使用情況,您可以使用默認參數值:

class Foo(object): 
    def __init__(self, module=None): 
     if not module: 
      import module 
     self.module = module 
+0

我想這是一個直覺,移除進口是有點'錯誤' – Magnus 2012-03-13 17:55:51

3

如果有問題的類可以使用多種不同的模塊中的一個,那麼它可能是有意義的傳遞在你想要使用的那個中。

但是,在我到目前爲止遇到的每種情況下,所需的模塊都是確定的,因此使用import將是首選。