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

时间:2015-04-28 08:22:39

标签: python file class module convention

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

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

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

3 个答案:

答案 0 :(得分:9)

  

每个班级的一个文件

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

在Python中,如果您将相关的类分组到一个文件中,那么您就是安全的。看一下Python standard library:许多模块在一个文件中包含多个类。

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

想象一下,socketserver.py会传播UDPServerTCPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServer,{{1 },BaseRequestHandlerStreamRequestHandler分为九个文件。你会如何导入这些?喜欢这个?

DatagramRequestHandler

这是一个简单的开销。当你写它时,它是开销。当你阅读它时,它是开销。这不容易吗?

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

那就是说,如果你将每个班级放在一个文件中,没有人会阻止你。它可能不是pythonic

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

我建议Google's style guide或官方style guide by the Python Foundation

您还可以在PEP index

中找到更多与Python的习语和元分析相关的资料