来自C ++背景我已经习惯于组织我的课程,因为在大多数情况下,课程与文件之间的比例为1:1。通过使单个文件包含单个类,我发现代码更易于导航。当我向Python介绍自己时,我发现很多例子,其中一个文件包含多个类。这是在Python中推荐的做事方式吗?如果是这样,为什么?
我在PEP8中错过了这个约定吗?
答案 0 :(得分:53)
以下是一些可能的原因:
大致相同功能的示例:Java的log4j =>几十个文件,~8000 SLOC。 Python logging => 3个文件,~2800 SLOC。
答案 1 :(得分:17)
有一句咒语,“扁平比嵌套更好”,这通常会阻止过度使用层次结构。我不确定是否有任何关于何时想要创建新模块的硬性规则 - 在大多数情况下,人们只是使用他们的自由裁量权来对逻辑相关的功能(与特定问题域相关的类和函数)进行分组
好thread from the Python mailing list,以及Fredrik Lundh的引用:
更重要的是在Python中, 你不要为每一个人使用课程 - 事情;如果你需要工厂, 单身人士,多种创造方式 对象,多态助手等,你 使用普通函数,而不是类或 静态方法。
一旦你完成了“就是这样的话” 类“,使用模块来组织 事情以一种有意义的方式 使用您的组件的代码 使导入语句看起来很好。
答案 2 :(得分:6)
这本书Expert Python Programming有一些相关的讨论
第4章:选择好名称:“构建命名空间树”和“拆分代码”
我的粗略摘要:将一些相关的类收集到一个模块(源文件),和
将一些相关模块收集到一个包中,有助于代码维护。
答案 3 :(得分:5)
在python中,类也可以用于小任务(仅用于分组等)。保持1:1的关系会导致文件太多,功能很少或很少。
答案 4 :(得分:4)
没有具体的约定 - 做任何事情都会使你的代码最易读和可维护。
答案 5 :(得分:2)
不为每个类提供单独文件的一个很好的例子可能是django应用程序中的models.py文件。每个django应用程序可能有一些与该应用程序相关的类,并将它们放入单个文件中只会使工作更多。
同样,将每个视图再次放在不同的文件中可能会适得其反。