2010-12-11 63 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__'] 

尼斯和容易。