有一个我一直在努力的python应用程序。
目前,它consits只是一对夫妇的文件,但它变得更大,我创造越来越多的文件,我的主要的Python文件的顶部,我做
import url_thread
import task_database
import xxxx
import yyyy
,我将要加入另一类今天是另一种进口!
有没有办法将这些文件PY粘成一个文件夹,只是不导入类/ *
有没有更好的办法,我应该这样做呢?
更多pythonic?
有一个我一直在努力的python应用程序。
目前,它consits只是一对夫妇的文件,但它变得更大,我创造越来越多的文件,我的主要的Python文件的顶部,我做
import url_thread
import task_database
import xxxx
import yyyy
,我将要加入另一类今天是另一种进口!
有没有办法将这些文件PY粘成一个文件夹,只是不导入类/ *
有没有更好的办法,我应该这样做呢?
更多pythonic?
您可以打包并从该包中导入:from mypackage import *
。
注意:这将加载'__init__'并从那里导入。另外,请注意'import *'有很多缺陷,因此在大多数情况下被认为是有害的(http://docs.python.org/howto/doanddont.html#from-module-import)。 – delnan 2010-12-11 20:56:14
是的,你可以做你在问什么,但不建议。
您可以创建一个package包含所有的模块,然后只导入一切污染您的命名空间:
from foo import *
...或者更好的办法是创建模块的一个很好的结构化的包,然后明确根据需要导入它们。
不要听人们对“命名空间污染”所说的所有内容。继续做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__']
尼斯和容易。
你知道你可以在一行上进行多次导入吗?即'import url_thread,task_database,xxxx,yyyy'但是总的来说,看看下面人们在说什么关于打包和导入整齐。除非真的有必要,否则应避免使用'from ... import *'。 – 2010-12-11 21:18:19
另外,每个模块可以有多个类!以防万一你不知道。 – Thomas 2010-12-11 22:48:07