问题:我应该在一个文件中放入多少个类?[关闭]
我习惯了Java模型,每个文件可以有一个公共类。Python没有此限制,我想知道组织类的最佳实践是什么。
回答 0
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
陈述中描绘的整体组织。
回答 1
由于没有人为的限制,所以它实际上取决于可理解的内容。如果您有一堆在逻辑上分组在一起的相当短,简单的类,则扔一堆’em。如果您有大型,复杂的类或没有整体意义的类,请每个类一个文件。或在两者之间选择。随着情况的变化进行重构。
回答 2
由于以下原因,我碰巧喜欢Java模型。将每个类放在单独的文件中可通过使类在浏览源代码时更易于查看来促进重用。如果您将一堆类组合到一个文件中,那么对于其他开发人员来说,可能不存在明显的类,这些类可以通过浏览项目的目录结构来重用。因此,如果您认为可以重用您的类,则可以将其放在自己的文件中。
回答 3
这完全取决于项目的规模,类的时长,是否可以从其他文件中使用它们等等。
例如,我经常使用一系列的类来进行数据抽象-因此我可能有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的模块文件对组织包一些有用的信息。
回答 4
当我对文件的庞大性感到厌烦,并且当期望的相关性结构开始自然地出现时,我发现自己将事情分解了。通常这两个阶段似乎是重合的。
如果过早地拆分内容,可能会很烦人,因为您开始意识到需要完全不同的结构排序。
另一方面,当任何.java或.py文件的行数超过700行时,我开始不断地烦恼,试图记住“特定位”在哪里。
使用Python / Jython,import语句的循环依赖关系似乎也发挥了作用:如果您尝试将太多相互协作的基本构件拆分成单独的文件,则这种语言的“限制” /“不完美”似乎会迫使您对事物进行分组,也许以一种明智的方式。
至于拆分成多个程序包,我并不是很清楚,但是我想说的是,烦恼和快乐结构的出现同样的规则适用于所有模块化级别。
回答 5
我要说的是,在该文件中放置尽可能多的类,这些类可以在逻辑上进行分组,而又不会使其变得太大和太复杂。