建议在单个文件中使用多个类吗?

Kar*_*rim 53 python class

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

来自C++背景我已经习惯于组织我的课程,这样在大多数情况下,课程和文件之间的比例为1:1.通过使单个文件包含单个类,我发现代码更易于导航.当我向Python介绍自己时,我发现很多例子,其中一个文件包含多个类.这是在Python中推荐的做事方式吗?如果是这样,为什么?

我在PEP8中错过了这个约定吗?

Vin*_*jip 58

以下是一些可能的原因:

  1. Python不仅仅是基于类的 - Python中代码分解的自然单位是模块.模块就像包含函数(Python中的第一类对象)一样.在Java中,分解的单位是类.因此,Python有一个模块=一个文件,Java有一个(公共)类=一个文件.
  2. Python比Java更具表现力,如果你将自己局限于每个文件一个类(Python不会阻止你这样做),你将会得到很多非常小的文件 - 更多的是为了跟踪而没有什么好处.

一个大致相同的功能的例子:Java的log4j =>几十个文件,~8000 SLOC.Python logging => 3个文件,~2800 SLOC.


cdl*_*ary 18

有一句口头禅,"扁平比嵌套更好",这通常会阻止过度使用层次结构.我不确定是否有任何关于何时想要创建新模块的硬性规则 - 在大多数情况下,人们只是使用他们的自由裁量权来对逻辑相关的功能(与特定问题域相关的类和函数)进行分组.

来自Python邮件列表的线程,以及Fredrik Lundh的引用:

更重要的是,在Python中,你不要为每件事使用类; 如果您需要工厂,单例,多种创建对象的方法,多态帮助器等,您可以使用普通函数,而不是类或静态方法.

一旦你掌握了"它是所有类",就可以使用模块以对使用组件的代码有意义的方式组织事物.
使import语句看起来很好.


sun*_*ang 6

本书专家Python编程有一些相关的讨论,
第4章:好名字:"构建空间树"和"拆分代码"
我的线粗总结:收集一些相关的类一个模块(源文件),并收集一些相关的模块一个包,有助于代码维护.


Uma*_*med 5

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