【发布时间】:2010-11-08 16:06:03
【问题描述】:
来自 C++ 背景,我已经习惯于组织我的类,在大多数情况下,类和文件之间的比例是 1:1。通过使单个文件包含单个类,我发现代码更易于导航。当我向 Python 介绍自己时,我发现了很多单个文件包含多个类的示例。这是在 Python 中推荐的做事方式吗?如果有,为什么?
我是否错过了PEP8 中的这个约定?
【问题讨论】:
来自 C++ 背景,我已经习惯于组织我的类,在大多数情况下,类和文件之间的比例是 1:1。通过使单个文件包含单个类,我发现代码更易于导航。当我向 Python 介绍自己时,我发现了很多单个文件包含多个类的示例。这是在 Python 中推荐的做事方式吗?如果有,为什么?
我是否错过了PEP8 中的这个约定?
【问题讨论】:
以下是一些可能的原因:
大致等效功能的示例:Java 的 log4j => 几十个文件,~8000 SLOC。 Python 日志记录 => 3 个文件,~ 2800 SLOC。
【讨论】:
有一句格言,“扁平比嵌套更好”,通常不鼓励过度使用层次结构。我不确定何时要创建新模块是否有任何硬性规定——在大多数情况下,人们只是自行决定对逻辑相关的功能(与特定问题域相关的类和函数)进行分组.
好的thread from the Python mailing list,引用 Fredrik Lundh 的话:
更重要的是,在 Python 中, 你不会为每个人都使用课程—— 事物;如果你需要工厂, 单例,多种创建方式 对象,多态助手等,你 使用普通函数,而不是类或 静态方法。
一旦你克服了“这就是一切 类”,使用模块来组织 以一种有意义的方式做事 使用您的组件的代码。
使导入语句看起来不错。
【讨论】:
这本书Expert Python Programming有一些相关的讨论
第 4 章:选择好名称:“构建命名空间树”和“拆分代码”
我的粗略总结:将一些相关的类收集到一个模块(源文件)中,并且
将一些相关模块收集到一个包中,有利于代码维护。
【讨论】:
在 python 中,类也可以用于小任务(仅用于分组等)。保持 1:1 的关系会导致文件过多,但功能很小或很少。
【讨论】:
对此没有特定的约定 - 尽一切可能使您的代码最具可读性和可维护性。
【讨论】:
django 应用程序中的 models.py 文件可能是每个类没有单独文件的一个很好的例子。每个 django 应用程序可能有一些与该应用程序相关的类,将它们放入单独的文件中只会增加工作量。
同样,将每个视图再次放在不同的文件中可能会适得其反。
【讨论】: