我用来Java模式里,你可以有一个公共类每文件。蟒蛇不会有这一限制,我想知道什么是最佳做法组织课程。

有帮助吗?

解决方案

Python文件称为“模块”它是组织软件以使其“有意义”的一种方式。另一个是名为“package”的目录。

模块是一个独特的东西,可能有一两个密切相关的类。诀窍是模块是你要导入的东西,你需要那些导入对那些阅读,维护和扩展你的软件的人来说是完全合理的。

规则如下:模块是重用的单位

您无法轻松重复使用单个班级。您应该能够毫无困难地重用模块。库中的所有内容(以及您下载和添加的所有内容)都是模块或模块包。

例如,您正在处理读取电子表格的内容,进行一些计算并将结果加载到数据库中。您希望主程序看起来像什么?

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 语句描绘的整体组织。

其他提示

由于没有人造限制,它实际上取决于什么是容易理解。如果你有一大堆的相当简短的课程,在逻辑上是组合在一起,抛在一堆'em。如果你有大,复杂的类或类别有意义的作为一个集团,去一个文件中每类。或者拿东西之间。"重构"作的事情改变。

我碰巧喜欢Java模型,原因如下。将每个类放在单个文件中可以通过在浏览源代码时更容易看到类来促进重用。如果您将一堆类分组到一个文件中,那么其他开发人员可能并不明白,那里的类可以通过浏览项目的目录结构来重用。因此,如果您认为您的类可以重用,我会把它放在自己的文件中。

这完全取决于项目的大小,类的长度,是否可以从其他文件中使用等等。

例如,我经常使用一系列类进行数据抽象 - 所以我可能有4或5个类,可能只有1行( class SomeData:pass )。

将每个文件拆分成单独的文件是愚蠢的 - 但由于它们可以在不同的文件中使用,所以将所有这些文件放在一个单独的 data_model.py 文件中是有意义的,所以我可以从mypackage.data_model导入导入SomeData,SomeSubData

如果你有一个包含大量代码的类,也许只有它使用的某些函数,那么将这个类和辅助函数分成一个单独的文件是个好主意。

您应该构建它们,以便从mypackage.database.schema导入MyModel 中的,而不是mypackage.email.errors中的导入MyDatabaseModel - 如果您从哪里导入东西有意义,文件不是数万行,你已经正确组织了它。

Python模块文档包含一些有用的信息组织包裹。

当我对文件的大小感到恼火,并且当相关性的理想结构开始自然地出现时,我发现自己分裂了。通常这两个阶段似乎重合。

如果你过早分裂,可能会非常烦人,因为你开始意识到需要完全不同的结构排序。

另一方面,当任何.java或.py文件超过大约700行时,我开始不断地试图记住“那个特定位”的位置。是

使用Python / Jython导入语句的循环依赖似乎也起作用:如果你试图将太多合作的基本构建块拆分成单独的文件,则这种“限制”/“不完美”指的是“限制”。这种语言似乎迫使你把事情分组,也许是以一种明智的方式。

至于拆分包,我真的不知道,但是我可能会说同样的烦恼规则和快乐结构的出现在各个层次的模块化中都有效。

我想说要把尽可能多的类放在那个文件中,而不要让它太大而复杂。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top