2011-06-07 62 views
1

我開發結構如下合理化封裝結構在python

/application 
    /lib 
    __init__.py 
    /models 
    __init__.py 
    model1.py 
    model2.py 
    model3.py 

在每個模型%.py文件一個Python庫有一個名爲型號%對應的類。我喜歡把這些類在他們自己的文件,但它意味着,在我的應用程序需要從模型包導入類,像這樣

from models.model1 import Model1 
from models.model2 import Model2 
from models.model3 import Model3 

是否有某種方式來做到這一點呢?

from models import Model1, Model2, Model3 

它感覺更直觀,更像我在做什麼。我有一個名爲models的包,我希望它包含這些類,但我仍然希望每個類都有它自己的文件,以便通過簡單地添加文件來添加新的模型。

以前我把這個在我的/應用/ lib目錄/模型/ _ 初始化 _py文件

from model1 import Model1 
from model2 import Model2 
from model3 import Model3 

但我理解這一點甚至被導入所有的類時,我只需要其中的一個

+1

它確實是一個選擇 - 我有很多不同的人說他們喜歡保留'__init __。py'空或者只做基本的init東西。你可以在'__init __。py'中定義'__all__',並且'from models import *' – tMC 2011-06-07 15:55:18

回答

2

您的最終解決方案是正確的。如果它導致嚴重的性能問題,你應該只擔心加載太多的類,這是我非常懷疑的。

1

一種方法是在導入類的模型目錄中創建一個文件,然後從該文件導入。例如,您可以創建一個名爲api.py文件,其中包含

from model1 import Model1 
from model2 import Model2 
from model3 import Model3 

然後,你可以導入模型這樣

from models.api import Model1, Model2, Model3 
+1

你可以在'__init __。py'中做同樣的事情 – tMC 2011-06-07 15:57:24

1

每個模塊創建單獨的數據包。將model1.py放入model1包中。在__init__.py文件model1包,把

from model1 import Model1 

那麼,你就可以從你的應用程序做

from model1 import Model1