将代码拆分为模块(约定)
Splitting code into modules (conventions)
所以我搜索了一下,但在 Google 或 PEP 上找不到任何讨论这个的内容。
我正在用 tkinter
做一个项目,我有一个文件,它是项目的一部分,只有 200 行代码(不包括所有注释掉的代码)。虽然整个文件都与项目的 GUI 部分相关,但我觉得它有点长而且有点宽泛。
我最终将文件拆分为 4 个不同的文件,每个文件都有自己的 GUI 部分。
基本上,目录如下所示:
project/
guiclasses/
statisticsframe.py
textframes.py
windowclass.py
main_gui.py
...
statisticsframe
有一个 class 框架,显示有关内容的统计信息。
textframes
持有3个classes的frame持有textareas,其中一个继承Frame,其他继承第一个。
windowclass
基本上创建 window 的根和 tkinter
GUI 的所有一般初始化。
main_gui
实际上不是名称,它只是简单地结合了以上三个并运行 mainloop()
总体而言,每个文件现在有 40-60 行代码。
我想知道是否有任何关于此的约定。大多数语言的经验法则是,如果您可以在其他地方重用函数/ classes,那么您应该拆分,尽管在 Python 中问题不大,因为您可以导入特定的 class 模块中的 es 和函数。
抱歉,如果它不够连贯,这里将近凌晨 3 点,它只是坐在我的脑后。
我不熟悉 tkinter
,所以我的建议会比较宽泛。
您可以使用任何您认为更好的模块拆分,但是
- 因为可读性很重要,请尝试使名称连贯并且不要重复自己:
guiclasses
- 您的整个程序都是关于 GUI 的,显然 类 某处,为什么要在名称中重复这个?想象一下在 import 中输入所有内容,让输入变得有意义
- 扁平结构比嵌套好,三个模块不用去submodule
- 最好的拆分是跨抽象层(这可能是最难的并且特定于
tkinter
)
- 模块中的任何东西都应该相当自给自足并且与程序的其他部分完全隔离
- 模块应该成为单元测试的良好实体(例如共享相同的固定装置)
- 你能为模块编写一个易于理解的文档字符串吗?那就不错了。
- 尝试通过示例学习,我经常在 Barry Warsaw mailman 寻求命名和包结构的智慧,也许您可以尝试寻找一些
tkinter
的信誉良好的回购(例如 IDLE?)。
从纯语法的角度来看,我会将模块命名为:
- <package_name>
- baseframe
- textframe
- window
- main
所以我搜索了一下,但在 Google 或 PEP 上找不到任何讨论这个的内容。
我正在用 tkinter
做一个项目,我有一个文件,它是项目的一部分,只有 200 行代码(不包括所有注释掉的代码)。虽然整个文件都与项目的 GUI 部分相关,但我觉得它有点长而且有点宽泛。
我最终将文件拆分为 4 个不同的文件,每个文件都有自己的 GUI 部分。
基本上,目录如下所示:
project/
guiclasses/
statisticsframe.py
textframes.py
windowclass.py
main_gui.py
...
statisticsframe
有一个 class 框架,显示有关内容的统计信息。
textframes
持有3个classes的frame持有textareas,其中一个继承Frame,其他继承第一个。
windowclass
基本上创建 window 的根和 tkinter
GUI 的所有一般初始化。
main_gui
实际上不是名称,它只是简单地结合了以上三个并运行 mainloop()
总体而言,每个文件现在有 40-60 行代码。
我想知道是否有任何关于此的约定。大多数语言的经验法则是,如果您可以在其他地方重用函数/ classes,那么您应该拆分,尽管在 Python 中问题不大,因为您可以导入特定的 class 模块中的 es 和函数。
抱歉,如果它不够连贯,这里将近凌晨 3 点,它只是坐在我的脑后。
我不熟悉 tkinter
,所以我的建议会比较宽泛。
您可以使用任何您认为更好的模块拆分,但是
- 因为可读性很重要,请尝试使名称连贯并且不要重复自己:
guiclasses
- 您的整个程序都是关于 GUI 的,显然 类 某处,为什么要在名称中重复这个?想象一下在 import 中输入所有内容,让输入变得有意义 - 扁平结构比嵌套好,三个模块不用去submodule
- 最好的拆分是跨抽象层(这可能是最难的并且特定于
tkinter
) - 模块中的任何东西都应该相当自给自足并且与程序的其他部分完全隔离
- 模块应该成为单元测试的良好实体(例如共享相同的固定装置)
- 你能为模块编写一个易于理解的文档字符串吗?那就不错了。
- 尝试通过示例学习,我经常在 Barry Warsaw mailman 寻求命名和包结构的智慧,也许您可以尝试寻找一些
tkinter
的信誉良好的回购(例如 IDLE?)。
从纯语法的角度来看,我会将模块命名为:
- <package_name>
- baseframe
- textframe
- window
- main