我该如何组织Python源代码?

And*_*ack 96 python unit-testing code-organization

我开始使用Python(现在是时候试一试了),我正在寻找一些最佳实践.

我的第一个项目是一个在多个线程中运行命令行实验的队列.我开始得到一个很长的main.py文件,我想打破它.一般来说,我在寻找:python程序员如何组织多个源文件?是否有适合您的特定结构?

我的具体问题包括:

  1. 每个班级应该在一个单独的档案中吗?
  2. 我应该如何组织相对于源代码的单元测试?
  3. 我应该在哪里放置doc注释,特别是那些用于命令行操作的注释?
  4. 如果我使用多个目录,如何在它们之间导入类?

我可以通过反复试验得出我自己的一些结论,但我宁愿从好的东西开始.

Dre*_*kes 29

Eric指出文章非常棒,因为它涵盖了组织大型Python代码库的细节.

如果您已经从Google登陆并尝试了解如何将一个大型源文件拆分为多个更易于管理的文件,我将简要总结一下这个过程.

假设您当前拥有名为的文件中的所有内容main.py:

  • 在同一个文件夹中创建另一个源文件(让我们utils.py为此示例调用我们的文件)
  • 将你需要的任何类,函数,语句等main.pyutils.py
  • main.py顶部添加一行:import utils

从概念上讲,这样做是为了创建一个utils在另一个源文件中调用的新模块.然后,您可以将其导入任何需要的地方.

  • @DanR,是的,[这是文章](http://infinitemonkeycorps.net/docs/pph/).由于某种原因,主持人删除了他的答案,尽管它有56个赞成票. (7认同)
  • 不幸的是,这篇文章现在是一个死链接:-(。最新的存档版本在这里:https://web.archive.org/web/20190714164001/http://infinitemonkeycorps.net/docs/pph/ (2认同)

Aut*_*ter 7

组织代码和测试的方式与任何OO语言完全相同.

从我这样做的方式回答.它可能不对,但对我有用

  1. 取决于您的功能如何分裂.对于我的主要python应用程序,我有1个文件,其中包含入口点的类,然后包含不同功能的包
  2. 我使用PyDev进行eclipse并像Java一样组织它.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
Run Code Online (Sandbox Code Playgroud)
  1. 在任何地方使用DocString来跟踪所有内容
  2. 确保相关__init__.py文件在文件夹中.它只是一个简单的例子from module import class

  • 但有一点需要注意:java与包,文件和类之间存在一种独裁关系.有时我最终会得到比我真正想要的更多的源文件.某些组织的约定 - 例如 - 避免(嵌套)内部类或文件中较低的"辅助"类 - 使这更糟糕,超出了编译器的要求.保持有序,层次结构很有用,但要尽量避免使用make-work. (5认同)