【问题标题】:When should a Python script be split into multiple files/modules?什么时候应该将 Python 脚本拆分为多个文件/模块?
【发布时间】:2011-01-20 04:40:25
【问题描述】:

在 Java 中,这个问题很简单(如果有点乏味的话)——每个类都需要自己的文件。所以项目中 .java 文件的数量就是类的数量(不包括匿名/嵌套类)。

不过,在 Python 中,我可以在同一个文件中定义多个类,但我不太确定如何找到拆分内容的点。为每个类创建一个文件似乎是错误的,但默认情况下将所有内容都保留在同一个文件中也感觉不对。我怎么知道在哪里分解程序?

【问题讨论】:

  • 好问题,我也一直在想这个问题。我添加了几个标签。

标签: python coding-style conventions


【解决方案1】:

请记住,在 Python 中,文件是一个模块,您很可能会导入它以使用其中包含的类。还记得软件开发的基本原则之一“the unit of packaging is the unit of reuse”,基本意思是:

如果类最有可能一起使用,或者如果使用一个类导致使用另一个类,则它们属于一个公共包。

【讨论】:

  • 这种方法让我烦恼的是:模块中的多个类变得非常长。拥有数千行的文件不是自相矛盾吗?考虑可维护性等。
【解决方案2】:

在我看来,这确实是一个关于重用和抽象的问题。如果您有一个可以用非常通用的方式解决的问题,以便生成的代码在许多其他程序中有用,请将它放在它自己的模块中。

例如:前段时间我写了一个(坏的)mpd 客户端。我想让配置文件和选项解析变得容易,所以我创建了一个类,它以我认为合理的方式结合了 ConfigParser 和 optparse 功能。它需要几个支持类,所以我把它们放在一个模块中。我从不使用客户端,但我在其他项目中重复使用了配置模块。

编辑:另外,我刚刚想到了一个更愤世嫉俗的答案:如果你只能以一种非常丑陋的方式解决问题,那么将丑陋隐藏在一个模块中。 :)

【讨论】:

    【解决方案3】:

    在 Java 中...每个类都需要自己的文件。

    另一方面,有时 Java 文件也会在主类中包含枚举或子类或接口,因为它们“密切相关”。

    不计算匿名/嵌套类

    不应将匿名类计算在内,但我认为对嵌套类的高雅使用是一种选择,就像您询问的关于 Python 的选择一样。

    (有时一个Java文件会有两个类,不是嵌套的,这是允许的,但是不要这样做。)

    【讨论】:

      【解决方案4】:

      Python 实际上让您可以选择以您认为合适的方式打包代码。

      Python 和 Java 的类比是一个文件,即 Python 中的 .py 文件是 相当于Java中的一个包,因为它可以包含许多相关的类和函数。

      有关好的示例,请查看 Python 内置模块。 只需下载源代码并查看它们,我遵循的经验法则是 当你有非常紧密耦合的类或函数时,你将它们保存在一个文件中 否则你就把它们拆散。

      【讨论】:

        猜你喜欢
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-09
        • 2011-11-24
        • 2017-01-02
        相关资源
        最近更新 更多