Answers:
Python文件称为“模块”,它是组织软件以使其具有“感觉”的一种方式。另一个是目录,称为“包”。
模块是一个独特的事物,可能具有一到两个紧密相关的类。诀窍在于,您将要导入一个模块,并且您需要该导入对将要阅读,维护和扩展您的软件的人们完全敏感。
规则是这样的:模块是重用的单位。
您无法轻松地重用单个类。您应该能够毫无困难地重用模块。库中的所有内容(以及下载和添加的所有内容)都是模块或模块包。
例如,您正在做的工作是读取电子表格,进行一些计算并将结果加载到数据库中。您希望主程序是什么样子?
from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader
def main( sourceFileName ):
rdr= Reader( sourceFileName )
c1= ACalc( options )
c2= AnotherCalc( options )
ldr= Loader( parameters )
for myObj in rdr.readAll():
c1.thisOp( myObj )
c2.thatOp( myObj )
ldr.laod( myObj )
将导入视为以概念或大块形式组织代码的方式。每次导入中到底有多少个类并不重要。重要的是您要在import
陈述中描绘的整体组织。
这完全取决于项目的规模,类的时长,是否可以从其他文件中使用它们等等。
例如,我经常使用一系列的类来进行数据抽象-因此我可能有4或5个类,它们只能是1行长(class SomeData: pass
)。
将这些文件拆分成单独的文件是愚蠢的-但是由于它们可能会在不同的文件中使用,因此将所有这些文件放在单独的data_model.py
文件中是有意义的,所以我可以from mypackage.data_model import SomeData, SomeSubData
如果您的类中包含大量代码,也许只使用了某些函数,那么将此类和辅助函数拆分为一个单独的文件将是一个好主意。
您应该对它们进行结构化设置from mypackage.database.schema import MyModel
,而不要这样做from mypackage.email.errors import MyDatabaseModel
-如果从有意义的位置导入内容,并且文件的长度不上万行,则说明您已正确组织了文件。
在Python的模块文件对组织包一些有用的信息。
当我对文件的庞大性感到厌烦,并且当期望的相关性结构开始自然地出现时,我发现自己将事情分解了。通常这两个阶段似乎是重合的。
如果过早地拆分内容,可能会很烦人,因为您开始意识到需要完全不同的结构排序。
另一方面,当任何.java或.py文件的行数超过700行时,我开始不断地烦恼,试图记住“特定位”在哪里。
使用Python / Jython,import语句的循环依赖关系似乎也发挥了作用:如果您尝试将太多相互协作的基本构件拆分成单独的文件,则这种语言的“限制” /“不完美”似乎会迫使您对事物进行分组,也许以一种明智的方式。
至于拆分成多个程序包,我并不是很清楚,但是我想说的是,烦恼和快乐结构的出现同样的规则适用于所有模块化级别。
我要说的是,在该文件中放置尽可能多的类,这些类可以在逻辑上进行分组,而又不会使其变得太大和太复杂。