我正在启动一个Python项目,预计会有20个或更多的类。作为良好的实践,我希望将它们分别放在单独的文件中。然而,当我这样做时,项目目录很快就会被文件淹没。
如果我把要导入的文件放到一个文件夹中,我就不能再导入它了。如何从另一个文件夹中导入文件?现在它在文件夹中,我需要以不同的方式引用它包含的类吗?
先感谢您的回答。
我正在启动一个Python项目,预计会有20个或更多的类。作为良好的实践,我希望将它们分别放在单独的文件中。然而,当我这样做时,项目目录很快就会被文件淹没。
如果我把要导入的文件放到一个文件夹中,我就不能再导入它了。如何从另一个文件夹中导入文件?现在它在文件夹中,我需要以不同的方式引用它包含的类吗?
先感谢您的回答。
__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包并观察它们是如何实现的。我建议先看看Django和Twisted。
"按照良好的实践,我希望将它们分别放在单独的文件中。"
实际上这并不是一个非常好的做法。你应该设计包含相关类的模块。
作为实际问题,没有一个类是完全孤立的。通常类是以逻辑相关的集群或组的形式出现。
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
简单的答案是在你新建的文件夹中创建一个名为__init__.py
的空文件。然后在你的顶层.py文件中使用类似以下的语句引入:
import mynewsubfolder.mynewclass