什么时候应该将Python脚本拆分为多个文件/模块?

什么时候应该将Python脚本拆分为多个文件/模块?,python,coding-style,conventions,Python,Coding Style,Conventions,在Java中,这个问题很简单(如果有点乏味的话)——每个类都需要自己的文件。因此,项目中.java文件的数量就是类的数量(不包括匿名/嵌套类) 不过,在Python中,我可以在同一个文件中定义多个类,我不太确定如何找到拆分的点。为每个类创建一个文件似乎是错误的,但默认情况下将所有内容都保留在同一个文件中也是错误的。如何知道在何处分解程序?请记住,在Python中,文件是一个模块,您很可能会导入它以使用其中包含的类。还要记住“软件开发”的一个基本原则,它基本上意味着: 如果类最有可能一起使用,或者

在Java中,这个问题很简单(如果有点乏味的话)——每个类都需要自己的文件。因此,项目中.java文件的数量就是类的数量(不包括匿名/嵌套类)


不过,在Python中,我可以在同一个文件中定义多个类,我不太确定如何找到拆分的点。为每个类创建一个文件似乎是错误的,但默认情况下将所有内容都保留在同一个文件中也是错误的。如何知道在何处分解程序?

请记住,在Python中,文件是一个模块,您很可能会导入它以使用其中包含的类。还要记住“软件开发”的一个基本原则,它基本上意味着:

如果类最有可能一起使用,或者如果使用一个类导致使用另一个类,则它们属于一个公共包

在Java中。。。每个类都需要自己的文件

另一方面,有时Java文件也会在主类中包含枚举、子类或接口,因为它们“密切相关”

不计算匿名/嵌套类

匿名类不应该被计算在内,但我认为有品味地使用嵌套类是一种选择,就像您所问的Python一样


(有时一个Java文件会有两个类,不是嵌套的,这是允许的,但讨厌的是不要这样做。)

Python实际上让您可以选择以您认为合适的方式打包代码

Python和Java之间的相似之处在于,Python中的.py文件是 相当于Java中的包,因为它可以包含许多相关的类和函数

要获得好的示例,请查看Python内置模块。 只需下载源代码并查看它们,我遵循的经验法则是 当您拥有紧密耦合的类或函数时,可以将它们保存在单个文件中
在我看来,这确实是一个关于重用和抽象的问题。如果您有一个问题,您可以用一种非常通用的方式来解决,因此生成的代码将在许多其他程序中有用,请将其放在它自己的模块中

例如:不久前我写了一个(坏的)mpd客户端。我想让配置文件和选项解析变得简单,所以我创建了一个类,以我认为合理的方式将ConfigParser和optparse功能结合起来。它需要几个支持类,所以我把它们都放在一个模块中。我从不使用客户机,但我在其他项目中重用了配置模块


编辑:另外,我刚刚想到了一个更加愤世嫉俗的答案:如果你只能用一种非常丑陋的方式解决问题,那么就把丑陋隐藏在一个模块中。:)

问得好,我也一直在想这个问题。我添加了几个标签。这种方法让我感到不舒服的是:模块越来越长,其中包含多个类。拥有数千行的文件不是适得其反吗?考虑可维护性等。