单个文件中推荐多个类吗?

66 投票
6 回答
84843 浏览
提问于 2025-04-15 12:44

可能重复的问题:
我应该在一个文件中放多少个Python类?

我之前是用C++编程的,习惯了把类和文件一一对应,也就是说一个类对应一个文件。这样做让我觉得代码更容易理解和查找。但是现在我开始学习Python,发现很多例子都是一个文件里有多个类。这是Python推荐的做法吗?如果是的话,为什么呢?

我是不是在< a href="http://www.python.org/dev/peps/pep-0008/" rel="noreferrer">PEP8这个规范中漏掉了什么?

6 个回答

7

这本书 《专家级Python编程》 里有相关的讨论。
第4章:选择好名字:“构建命名空间树”和“拆分代码”。
我简单总结一下:把一些相关的类放到一个模块(源文件)里,把一些相关的模块放到一个包里,这样有助于代码的维护。

21

有一句话叫“扁平化比嵌套更好”,这句话通常是劝大家不要过度使用层级结构。我不确定什么时候应该创建一个新模块有严格的规则,通常人们会根据自己的判断,把逻辑上相关的功能(比如与特定问题相关的类和函数)放在一起。

这里有个不错的Python邮件列表的讨论,还有Fredrik Lundh的一句话:

在Python中,更重要的是,你并不是所有东西都用类;如果你需要工厂、单例、多种创建对象的方式、多态的助手等等,你可以用普通的函数,而不是类或静态方法。

一旦你克服了“所有东西都是类”的想法,就可以用模块来组织代码,让使用你组件的代码更容易理解。
让导入语句看起来更整洁。

75

这里有一些可能的原因:

  1. Python并不是完全基于类的,Python中代码的基本单位是模块。模块里可以包含函数(在Python中,函数是重要的对象),也可以包含类。而在Java中,代码的基本单位是类。因此,Python通常是一个模块对应一个文件,而Java则是一个(公共)类对应一个文件。
  2. Python的表达能力比Java强很多。如果你限制自己每个文件只写一个类(虽然Python并不强制这样做),你会发现会有很多非常小的文件,这样会增加管理的难度,但几乎没有什么好处。

举个大致功能相当的例子:Java的log4j需要大约二十几个文件,代码行数大约8000行。而Python的日志功能只需要3个文件,代码行数大约2800行。

撰写回答