将代码拆分为模块(约定)

时间:2018-08-15 23:57:57

标签: python python-3.x conventions

所以我一直在搜索,在Google或PEP上找不到任何讨论此内容的信息。
我正在使用tkinter做一个项目,我有一个文件,它是项目的一部分,只有200行代码(不包括所有注释掉的代码)。虽然整个文件都与项目的GUI部分相关,但对我来说感觉有点长而且有点宽。
我最终将文件分成4个不同的文件,每个文件都有其自己的GUI部分。
基本上,目录如下所示:

project/
        guiclasses/
                   statisticsframe.py
                   textframes.py
                   windowclass.py
        main_gui.py
        ...

statisticsframe有一个框架类,用于显示有关事物的统计信息。
textframes拥有3类拥有文本区域的框架,其中一种继承了Frame,其他继承了第一个。
windowclass基本上会创建窗口的根以及tkinter GUI的所有常规初始化。
main_gui实际上不是名称,它只是将以上三个全部结合在一起并运行mainloop()

总体而言,每个文件现在都是40-60行代码。

我想知道是否对此有任何约定。大多数语言的经验法则是,如果您可以在其他地方重用函数/类,则应该拆分,尽管在Python中这不是问题,因为可以从模块中导入特定的类和函数。

很抱歉,如果不够连贯,这里将近凌晨3点,它只是坐在我的脑后。

1 个答案:

答案 0 :(得分:1)

我对tkinter不熟悉,所以我的建议会很广泛。

您可以使用感觉更好的任何拆分模块,但

  • 由于可读性很重要,请尝试使名称保持连贯性,并且不要重复自己:guiclasses-您讨厌的程序是关于GUI的,而且显然在某处有类,为什么在名称中重复该名称?想象一下在导入中输入所有内容,使输入变得有意义
  • 平面结构比嵌套结构好,三个模块不必转到子模块
  • 最好的划分是跨抽象层(这可能是最困难的,并且特定于tkinter
  • 模块中的任何内容都应自给自足,并且与程序的其他部分完全隔离
  • 模块应该很好地进行单元测试(例如,共享相同的夹具)
  • 您能为模块写一个易于理解的文档字符串吗?那就好。
  • 通过示例进行学习,我经常在Barry Warsaw mailman中寻求命名和包装结构方面的智慧,也许您可​​以尝试使用tkinter找到一些知名的仓库(例如IDLE?)。

从纯粹的语法角度来看,我将模块命名为:

- <package_name>
   - baseframe
   - textframe
   - window
   - main