问题 Python:每个类一个模块(文件.py)? [关闭]


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

那么,在Python中,每个类的一个文件或同一文件中的许多类(如果它们可以按任何特定功能分组)? (如同一侧的机动车辆和另一侧的车辆)。

很明显,每个人都有自己的风格,但是当我问,我希望一般的答案或只是惯例,无论如何,如果有人想告诉我他对自己的风格和原因的看法,请随意做! ;)


13088
2018-04-28 08:22


起源

我认为你得到的任何答案都是一个意见,没有确定的答案。 - Padraic Cunningham
如果您希望每个类有一个文件,请将您的类文件组织到一个目录中并拥有一个 __init__.py那样做 from ClassName import * 为每个班级。 “从不这样做”似乎是一个非常不屑一顾的答案,就像任何模式都有优点和缺点。 - szmoore


答案:


每个班级一个文件

不要这样做。在Java中,您不能 - 按设计 - 在文件中有多个类。

在Python中,如果你分组 有关 在单个文件中的类,您是安全的。看看吧 Python标准库:许多模块在单个文件中包含多个类。

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

想像 socketserver.py 会蔓延 UDPServerTCPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandler 分成九个文件。你会如何导入这些?喜欢这个?

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

这是明显的开销。当你写它时,这是开销。当你阅读它时,这是开销。这不容易吗?

from socketserver import TCPServer, ForkingTCPServer

也就是说,如果你将每个类放入一个文件中,没有人会阻止你。它可能不是 Python的


9
2018-04-28 08:25



但为什么?我的意思是,为每个类创建一个文件有什么问题,或者为什么在同一个文件中定义许多类是没问题的? - Drumnbass
这没有错,但它可能会成为很多进口的混乱 - Morb
我也是用C ++做的,我把所有相关的类放在同一个文件中。要打开的文件越少,包含的内容越少,找到我想要的类/文件的时间就越少。 - Morb
但我认为,如果我为每个类创建一个文件代码就像......不再清晰,但我知道在每个时刻我都定义了所有类。如果我为每个文件定义了很多类,那么我可能会在寻找某个特定的类时陷入困境。 - Drumnbass
@Morb嗯......那是对的。我看到的唯一优势是不要混淆文件之间的循环依赖,但不是很多。 - Drumnbass


Python具有包,模块和类的概念。如果你为每个模块放一个类,那么拥有模块的优势就会消失。如果你是一个庞大的类,可以把这个类放在一个单独的文件中,但是再说一次,拥有大类是不是很好?不,它很难测试和维护。最好有更多具有特定任务的小类,并将它们逻辑分组到尽可能少的文件中。


4
2018-04-28 08:51





每个文件都有一个类没有错。 Python不是直接针对面向对象的设计,因此这就是为什么你可以为每个文件放弃多个类。

如果您对“正确”的方法感到困惑,我建议您阅读一些风格指南。

我建议 谷歌的风格指南 或官员 Python基金会的风格指南

您还可以在中找到更多与Python的习语和元分析相关的资料 PEP指数


1
2018-04-28 08:35