组织我的Python项目

时间:2008-12-24 17:23:14

标签: python project-organization

我正在开始一个Python项目,并期望它有20个或更多的类。作为一种好的做法,我想将它们分别放在一个单独的文件中。但是,项目目录很快就会被文件淹没(或者当我这样做时)。

如果我在文件夹中放入要导入的文件,则无法再导入该文件。如何从另一个文件夹导入文件,我是否需要引用它所包含的类,因为它位于文件夹中?

提前致谢

4 个答案:

答案 0 :(得分:31)

在您的项目文件夹中创建一个__init__.py文件,它将被Python视为一个模块。

然后可以使用以下语法导入包目录中的类:

from package import class
import package.class

__init__.py中,您可以创建一个定义__all__行为的from package import *数组:

# name1 and name2 will be available in calling module's namespace 
# when using "from package import *" syntax
__all__ = ['name1', 'name2'] 

这是way more information than you even want to know about packages in Python

一般来说,了解如何组织大量代码的好方法是选择一个流行的Python包,看看他们是如何做到的。对于初学者,我会查看DjangoTwisted

答案 1 :(得分:22)

“按照良好做法,我想将它们分别放在一个单独的文件中。”

这实际上不是一个很好的做法。您应该设计包含密切相关类的模块。

实际上,没有一个班级完全独立。通常,类存在于逻辑上相关的集群或组中。

答案 2 :(得分:12)

Python不会强迫您使用Java令人讨厌的每个文件类型的单一类。实际上,除非它们很大,否则将每个类放在单独的文件中甚至不被认为是好的风格。 (如果它们很大,你可能还是必须进行重构。)相反,你应该在模块中对类似的类和函数进行分组。例如,如果您正在编写GUI计算器,则包布局可能如下所示:

/amazingcalc
   /__init__.py # This makes it a Python package and importable.
   /evaluate.py # Contains the code to actually do calculations.
   /main.py # Starts the application
   /ui.py # Contains the code to make a pretty interface

答案 3 :(得分:6)

简单的答案是在您创建的新文件夹中创建一个名为__init__.py的空文件。然后在您的顶级.py文件中包含以下内容:

import mynewsubfolder.mynewclass