Python脚本何时应分为多个文件/模块?

34 投票
4 回答
11403 浏览
提问于 2025-04-16 10:17

在Java中,这个问题比较简单(虽然有点繁琐)——每个类都需要一个单独的文件。所以在一个项目中,.java文件的数量就是类的数量(不算匿名类和嵌套类)。

但是在Python中,我可以在同一个文件里定义多个类,我不太确定应该在哪个地方把它们分开。为每个类都创建一个文件似乎不太对,但把所有东西都放在同一个文件里也感觉不太对。我该怎么知道在哪里把程序拆分开呢?

4 个回答

2

在Java中,每个类都需要单独一个文件。

不过,有时候一个Java文件里也会包含枚举、子类或者接口,这些通常是因为它们之间关系很紧密,所以放在主类里面。

不算匿名类和嵌套类。

匿名类不算在内,但我觉得适当地使用嵌套类就像你问Python时的选择一样。

(偶尔一个Java文件里会有两个不嵌套的类,这也是允许的,但其实这样做不太好。)

4

我觉得这个问题其实是关于重用和抽象的。如果你遇到一个可以用很通用的方法解决的问题,这样写出来的代码在其他很多程序中也能用,那就把它放到一个单独的模块里。

举个例子:之前我写了一个(很糟糕的)mpd客户端。我想让配置文件和选项解析变得简单,所以我创建了一个类,把ConfigParser和optparse的功能结合在一起,按照我认为合理的方式来做。这个类需要几个辅助类,所以我把它们都放在一个模块里。虽然我从来没用过这个客户端,但我在其他项目中重用了这个配置模块。

补充一下:我突然想到一个更消极的回答:如果你只能用一种很糟糕的方法来解决问题,那就把这些糟糕的部分藏在一个模块里吧。:)

22

记住,在Python中,文件其实就是一个模块,你很可能会导入这个模块来使用里面的类。同时也要记住软件开发的一个基本原则:“打包的单位就是重用的单位”,这句话的意思大致是:

如果一些类通常是一起使用的,或者使用一个类会导致你需要使用另一个类,那么它们就应该放在一个共同的包里。

撰写回答