2012-11-04 34 views
1

我有一個使用MVC模式的項目。Python在單獨文件中管理類

在「模型」文件夾中,我有很多類,每個類現在都有它自己的文件。但我覺得這樣不方便,因爲每次我需要使用課程時,我都必須單獨導入它。例如。我有很多的以下的在我的應用程序源:

from models.classX import classX 
from models.classY import classY 

如果我想一次導入的一切,像from models import *我發現,我可以把各種importmodels/__init__.py。但是這是做Python的pythonic方式嗎?什麼是約定?

+0

請使用PEP8外殼,以便您可以區分類和模塊! - 'from models.classx import ClassX' – Eric

回答

0

大多數pythonic方式是你已經使用。您可以通過將模塊中的類分組來緩解導入。例如,在Django中,通常所有的應用程序模型都在一個文件中。

蟒蛇docs

雖然某些模塊的設計出口,只有當你使用import *遵循某種模式的名稱,它仍然被認爲在生產代碼不好的做法。

6

Python不是java;請避免每類文件一個文件。如果你不能改變它,你可以導入所有的人都從你models包的子模塊:

# all.py: convenient import of all the needed classes 
from models.classX import classX 
from models.classY import classY 
... 

然後在你的代碼,你可以寫:

import my.package.models.all as models # or from my.package.models.all import * 

,並繼續使用models.classXmodels.classY

+3

你可以在'models/__ init __。py'中做同樣的事情,然後你只需要'import my.package.models'。 – glglgl

+2

@glglgl然後你失去了單獨導入'class ...'模塊的能力 - 從包中導入任何東西都會加載整個包。如果這種緊密耦合是可取的(或者已經存在),那麼將它們導入'__init __。py'就是要走的路。但人們希望擁有這麼多模塊的全部*點能夠分別導入它們。 – user4815162342

+0

mmm ...你說得對。這是其中的缺點... – glglgl

0

首先,你應該重命名類和模塊,使它們不匹配,並遵循PEP8:

models/ 
    classx.py 
     class ClassX 
    classy.py 
     class ClassY 

然後,我會用這讓在models/__init__.py

from models.classx import ClassX 
from models.classy import ClassY 

意義在你的主代碼中,你可以做的任何一個:

from models import * 
x = ClassX() 
from models import ClassX 
x = ClassX() 
import models 
x = models.ClassX() 
相關問題