46

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

如果我将要导入的文件放在文件夹中,我将无法再导入它。如何从另一个文件夹中导入文件,并且由于它位于文件夹中,我是否需要以不同的方式引用它包含的类?

提前致谢

4

4 回答 4

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'] 

这里有比你想知道的 Python 包更多的信息

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

于 2008-12-24T17:31:40.117 回答
22

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

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

实际上,没有一个类实际上是完全独立的。通常,类以逻辑相关的集群或组的形式出现。

于 2008-12-24T17:42:54.963 回答
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
于 2008-12-24T17:33:00.410 回答
6

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

import mynewsubfolder.mynewclass
于 2008-12-24T17:33:09.333 回答