Python:每个 class 一个模块(文件 .py)?

Python: one single module (file .py) for each class?

我在 2 周前 python 开始编程。我正在为每个 class 创建一个单独的文件(模块),就像我以前使用 Java 或 C# 等语言所做的那样。 但是现在,看到其他人的教程和代码,我意识到很多人使用相同的文件来定义超过 1 class 和主要功能,但我不知道他们是否那样做,因为只是示例,或者因为它是 python 约定或类似的东西(在同一文件中定义和分组许多 classes)。

因此,在 Python 中,每个 class 对应一个文件,或者同一文件中的多个 class 是否可以按任何特定功能分组? (就像一侧是机动车,另一侧是车辆)。

很明显每个人都有自己的风格,但是当我问的时候,我希望得到笼统的回答或者只是约定俗成,反正如果有人想告诉我他对自己风格的看法以及为什么,尽管这样做它! ;)

one file for each class

不要这样做。在Java中,你通常不会在一个文件中有超过一个class(你当然可以nest)。

在 Python 中,如果将 相关的 class 分组在一个文件中,则比较安全。看看 Python standard library:许多模块在单个文件中包含多个 class。

至于为什么?简而言之:可读性。我个人喜欢不必在文件之间切换来阅读相关或相似的代码。它还使导入更加简洁。

假设 socketserver.py 会传播 UDPServerTCPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandler分为九个文件。你将如何导入这些?像这样?

from socketserver.tcp.server import TCPServer
from socketserver.tcp.server.forking import ForkingTCPServer
...

这是简单的开销。当您编写它时,它是开销。当你阅读它时,它是开销。这不是更简单吗?

from socketserver import TCPServer, ForkingTCPServer

就是说,如果您将每个 class 放入一个文件中,没有人会阻止您。它可能不是 pythonic.

每个文件有一个 class 并没有错。 Python 并不直接针对面向对象的设计,所以这就是为什么每个文件可以有多个 classes。

如果您对 'proper' 的实现方式感到困惑,我建议您阅读一些风格指南。

我建议 Google's style guide or the official style guide by the Python Foundation

您还可以在 PEP index

中找到更多与 Python 的成语和元分析相关的 material

Python 有包、模块和 classes 的概念。如果每个模块放置一个 class,那么拥有模块的优势就消失了。如果你有一个巨大的 class,将这个 class 放在一个单独的文件中可能没问题,但是话又说回来,拥有大的 class 是不是很好?不,很难测试和维护。最好有更多具有特定任务的小型 classes,并将它们按逻辑分组在尽可能少的文件中。