2010-12-11 45 views
2

早上,Python - 應用程序的結構

有一個我一直在努力的python應用程序。

目前,它consits只是一對夫婦的文件,但它變得更大,我創造越來越多的文件,我的主要的Python文件的頂部,我做

import url_thread 
import task_database 
import xxxx 
import yyyy 

,我將要加入另一類今天是另一種進口!

有沒有辦法將這些文件PY粘成一個文件夾,只是不導入類/ *

有沒有更好的辦法,我應該這樣做呢?

更多pythonic?

+0

你知道你可以在一行上進行多次導入嗎?即'import url_thread,task_database,xxxx,yyyy'但是總的來說,看看下面人們在說什麼關於打包和導入整齊。除非真的有必要,否則應避免使用'from ... import *'。 – 2010-12-11 21:18:19

+0

另外,每個模塊可以有多個類!以防萬一你不知道。 – Thomas 2010-12-11 22:48:07

回答

0

您可以打包並從該包中導入:from mypackage import *

+2

注意:這將加載'__init__'並從那裏導入。另外,請注意'import *'有很多缺陷,因此在大多數情況下被認爲是有害的(http://docs.python.org/howto/doanddont.html#from-module-import)。 – delnan 2010-12-11 20:56:14

1

是的,你可以做你在問什麼,但不建議。

您可以創建一個package包含所有的模塊,然後只導入一切污染您的命名空間:

from foo import * 

...或者更好的辦法是創建模塊的一個很好的結構化的包,然後明確根據需要導入它們。

0

不要聽人們對「命名空間污染」所說的所有內容。繼續做from classes import *,如果方便的話(我相信是這樣),但考慮在你的包中使用__all__

確切的說,下面的文件夾結構將做到這一點:

classes/ 
|-- class1.py 
|-- class2.py 
`-- __init__.py 

添加文件classes/__init__.py創建軟件包。它看起來像這樣:

請注意周圍的類名引號中__all__

然後,您可以使用包在你擁有的任何腳本:

>>> from classes import * 
>>> Class1 
<class classes.class1.Class1 at 0xb781c68c> 
>>> Class2 
<class classes.class2.Class2 at 0xb781c6ec> 
>>> dir() 
['Class1', 'Class2', '__builtins__', '__doc__', '__name__', '__package__'] 

尼斯和容易。