Python 是否建议在一个文件中包含多个类?

Python 是否建议在一个文件中包含多个类?,python,class,Python,Class,可能重复: P>来自C++背景,我习惯于组织我的类,这样,在大多数情况下,类和文件之间的比例为1:1。通过使单个文件包含单个类,我发现代码更易于导航。在我介绍Python时,我发现了很多示例,其中一个文件包含多个类。这是Python中推荐的做事方式吗?若然,原因为何 在python中,类还可以用于小任务(仅用于分组等)。保持1:1的关系会导致文件太多,功能太小或太少。有一句格言,“扁平比嵌套好”,这通常会阻止过度使用层次结构。我不确定是否有任何硬性规定来确定何时创建新模块——在大多数情况下,

可能重复:

<> P>来自C++背景,我习惯于组织我的类,这样,在大多数情况下,类和文件之间的比例为1:1。通过使单个文件包含单个类,我发现代码更易于导航。在我介绍Python时,我发现了很多示例,其中一个文件包含多个类。这是Python中推荐的做事方式吗?若然,原因为何


在python中,类还可以用于小任务(仅用于分组等)。保持1:1的关系会导致文件太多,功能太小或太少。

有一句格言,“扁平比嵌套好”,这通常会阻止过度使用层次结构。我不确定是否有任何硬性规定来确定何时创建新模块——在大多数情况下,人们只是根据自己的判断来对逻辑相关的功能(与特定问题域相关的类和函数)进行分组

很好,引用弗雷德里克·伦德的一句话:

更重要的是,在Python中, 并不是每一次都使用类- 事情如果你需要工厂, 单例,多种创建方法 对象、多态帮助程序等,您可以 使用普通函数,而不是类或 静态方法

一旦你克服了“一切都完了” “类”,使用模块进行组织 以一种对你有意义的方式 使用组件的代码。
使导入语句看起来很好


这方面没有特定的约定-尽一切可能使您的代码最具可读性和可维护性。

以下是一些可能的原因:

  • Python并不完全基于类——Python中代码分解的自然单元是模块。模块和类一样可能包含函数(Python中的第一类对象)。在Java中,分解的单位是类。因此,Python有一个模块=一个文件,Java有一个(公共)类=一个文件
  • Python比Java更具表现力,如果您将自己限制为每个文件一个类(Python不会阻止您这样做),那么最终将得到大量非常小的文件——更多的文件需要跟踪,但好处很小
  • 一个大致相当的功能示例:Java的log4j=>几十个文件,约8000个SLOC。Python日志=>3个文件,约2800个SLOC。

    这本书有一些相关的讨论
    第4章:选择好的名称:“构建名称空间树”和“拆分代码”
    我的行摘要:收集一些相关的类到一个模块(源文件),然后
    将一些相关模块收集到一个包中,有助于代码维护。

    django应用程序中的models.py文件可能是每个类没有单独文件的一个好例子。每个django应用程序可能都有一些与该应用程序相关的类,将它们放在单独的文件中只会做更多的工作


    同样,将每个视图重新放在不同的文件中可能会适得其反。

    Duplicate:Love过度使用层次结构部分的解释。有时,当代码中过度使用层次结构时,理解代码是非常困难的。尤其是在没有很好的文档记录的情况下,即使是“hello world”代码也会让人头疼,我不同意。通过在一个文件中包含更多的类,您只需公开更多受循环依赖关系影响的类,而循环依赖关系甚至可能不会成为问题,因为它们位于不同的文件中。但只有在这种情况下,分组才会产生不一致的代码库。这取决于情况。如果您在models.py中讨论多个模型,那么无论如何都不应该在全局范围内导入其他模型文件(这在过去是循环依赖的一种可靠方式:IIRC django现在甚至不允许进行检查)。