Python 3.6开发:如何划分主程序与类的代码范围?
如何划分主程序与类的代码?
这其实是个关于职责分离的经典问题,结合你开发的单词放置程序场景,我给你几个实用的判断维度,帮你理清边界:
1. 类要封装「核心实体的行为与状态」
你的程序里最核心的实体是单词网格,所有和这个实体相关的状态(比如网格尺寸、已放置单词的位置记录)、行为(随机选合法坐标、放置单词、绘制网格)都应该放进类里。
举个具体的例子:
- 类里要有
__init__方法来初始化网格的基本参数(比如尺寸) - 要有
place_word方法,内部封装随机坐标生成、位置合法性校验、单词写入网格的逻辑 - 要有
draw_grid方法负责完成绘图的具体操作
把这些代码放进类的原因很直观:它们都围绕「网格」这个核心展开,封装后你后续要调整网格规则(比如改成矩形网格)或放置逻辑(比如支持斜向放单词),只需要修改类内部,不会影响主程序的流程。
2. 主程序负责「流程编排与外部交互」
主程序是整个程序的入口,要处理那些和核心实体无关的流程性、交互性工作,比如:
- 读取文件中的单词列表(
with open(...)这类文件操作) - 接收用户输入(比如让用户自定义网格大小)
- 初始化你的网格类实例
- 调用类的方法完成单词放置、绘图等核心任务
- 处理程序的启动/收尾逻辑(比如捕获文件读取异常、输出运行结果)
比如主程序的代码大概会是这样:
if __name__ == "__main__": # 读取单词文件 try: with open("words.txt", "r") as f: words = [line.strip() for line in f if line.strip()] except FileNotFoundError: print("单词文件未找到,请检查路径!") exit() # 初始化网格类 word_grid = WordGrid(size=10) # 批量放置单词 for word in words: if not word_grid.place_word(word): print(f"单词 {word} 无法放置,跳过") # 生成最终绘图 word_grid.draw_grid()
3. 快速判断准则:「是否依赖类的状态」
如果一段代码需要频繁访问某个实体的状态(比如网格的已占用位置),那它就该放进类里;如果代码只是做「调度」,不需要记住任何实体状态,就留在主程序里。
比如你要是把「随机选坐标」的逻辑放在主程序,每次都得把网格尺寸、已占用位置传过去,代码会变得冗余又麻烦——但放在类里的话,类自己清楚当前的网格状态,处理起来简洁得多。
4. 考虑未来的扩展性
如果以后你想给程序加功能,比如支持导出网格为图片、添加不同的放置模式(横向/纵向),把这些逻辑放在类里会更容易扩展。主程序只需要调用新增的方法,不需要大幅修改结构。
总结一下:类是干具体活的「工具/实体」,主程序是安排任务的「指挥」,把两者的职责分清楚,代码会更清晰、更容易维护。
内容的提问来源于stack exchange,提问作者long_time_newbie
相关产品推荐
相关产品推荐

