在Java中,这个问题很容易(如果有点乏味) - 每个类都需要自己的文件。因此,项目中.java文件的数量是类的数量(不包括匿名/嵌套类)。
但是,在Python中,我可以在同一个文件中定义多个类,而且我不太确定如何找到我分解的点。为每个类创建一个文件似乎是错误的,但是默认情况下将所有内容保留在同一个文件中也是错误的。我怎么知道在哪里打破一个程序?
答案 0 :(得分:15)
请记住,在Python中,文件是您最有可能导入的模块,以便使用其中包含的类。还要记住软件开发的基本原则之一“the unit of packaging is the unit of reuse”,这基本上意味着:
如果类很可能一起使用,或者如果使用一个类导致使用另一个类,则它们属于一个公共包。
答案 1 :(得分:3)
正如我所看到的,这实际上是一个关于重用和抽象的问题。如果您遇到一个问题,可以通过非常通用的方式解决,那么生成的代码在许多其他程序中都很有用,请将它放在自己的模块中。
例如:前一段时间我写了一个(坏)mpd客户端。我想让配置文件和选项解析变得容易,所以我创建了一个以我认为合理的方式组合ConfigParser和optparse功能的类。它需要几个支持类,所以我把它们放在一个模块中。我从不使用客户端,但我在其他项目中重用了配置模块。
编辑:另外,我发现了一个更愤世嫉俗的答案:如果你只能以一种非常丑陋的方式解决问题,那就隐藏一个模块中的丑陋。 :)答案 2 :(得分:2)
在Java中......每个类都需要自己的文件。
另一方面,有时Java文件也会在主类中包含枚举或子类或接口,因为它们“密切相关”。
不计算匿名/嵌套类
不应该计算匿名类,但我认为有条不紊地使用嵌套类是一种选择,就像你要问的那样。
(有时候一个Java文件会有两个类,而不是嵌套的,这是允许的,但是你不会这样做。)
答案 3 :(得分:0)
Python实际上让您可以选择以您认为合适的方式打包代码。
Python和Java之间的类比是一个文件,即Python中的.py文件 相当于Java中的包,因为它可以包含许多相关的类和函数。
有关好的示例,请查看Python内置模块。 只需下载源代码并检查它们,我遵循的经验法则是 当你有非常紧密耦合的类或函数时,你将它们保存在一个文件中 否则你会分手。