How many classes should I put in one file?
我习惯了Java模型,其中每个文件可以有一个公共类。Python没有这种限制,我想知道组织类的最佳实践是什么。
python文件被称为"模块",它是组织软件以使其"有意义"的一种方法。另一个是一个叫做"包"的目录。
一个模块是一个独特的东西,它可能有一到二十个密切相关的类。诀窍是,模块是您将要导入的东西,并且您需要该导入对将阅读、维护和扩展您的软件的人非常敏感。
规则是:模块是重用的单元。
你不能轻易地重用一个类。您应该能够毫无困难地重用模块。库中的所有内容(以及下载和添加的所有内容)要么是模块,要么是模块包。
例如,您正在处理一些读取电子表格、进行一些计算并将结果加载到数据库中的内容。你希望你的主程序看起来像什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 ) |
把导入看作是在概念或块中组织代码的方法。每个导入中有多少类并不重要。重要的是你用你的
因为没有人为的限制,它实际上取决于什么是可理解的。如果你有一堆逻辑上分组在一起的相当短、简单的类,那么就把它们放在一起。如果你有大的、复杂的类或者作为一个组没有意义的类,那么就每个类放一个文件。或者在中间挑点什么。随着事物的变化而重构。
我碰巧喜欢Java模型,原因如下。将每个类放在一个单独的文件中,通过在浏览源代码时更容易看到类,可以促进重用。如果您将一组类分组到一个文件中,那么其他开发人员可能并不明显,那里有一些类可以通过浏览项目的目录结构来重用。因此,如果您认为类可能被重用,那么我将把它放在自己的文件中。
这完全取决于项目有多大,类有多长,是否将从其他文件中使用,等等。
例如,我经常使用一系列类来提取数据,所以我可能有4或5个类,它们可能只有1行长(
把这些文件分为不同的文件是很愚蠢的,但是因为它们可以从不同的文件中使用,所以把它们放在一个单独的
如果您有一个包含大量代码的类,可能只有它使用的一些函数,那么最好将这个类和助手函数分割成一个单独的文件。
你应该对它们进行结构化,这样你就可以执行
python模块文档提供了一些关于组织包的有用信息。
当我对文件的庞大感到恼火时,以及当所需的关联结构开始自然出现时,我发现自己正在把事情分开。通常这两个阶段似乎是一致的。
如果你过早地把事情分开会很烦人,因为你开始意识到需要一个完全不同的结构顺序。
另一方面,当任何.java或.py文件的长度超过700行时,我总是会不断地试图记住"特定的位"在哪里。
有了python/jython,导入语句的循环依赖性似乎也扮演了一个角色:如果您试图将太多协作的基本构建块分割成单独的文件,那么这种语言的"限制"/"不完善"似乎会迫使您对事物进行分组,也许这是一种相当明智的方式。
至于拆分成包,我不太清楚,但我想说的可能是,烦恼的规则和快乐结构的出现在模块化的各个层次上都起作用。
我想说,在该文件中放入尽可能多的逻辑分组类,而不要使它太大和太复杂。